Results Study 1: Personality Change Through Self-Improvement or Self-Acceptance

Author

[blinded]

1 Load packages

Show the code
library(renv)
library(tidyverse)
library(broom)
library(labelled)
library(psych)
library(GPArotation)
#library(devtools)
#install_github("cran/multicon") # not on CRAN atm
library(multicon)
library(correlation)
library(careless)
library(corrplot)
library(lavaan)
library(semTools)
library(semPlot)
library(knitr)
library(ggdist)
library(ggforce)
library(cowplot)
library(nortest)
library(lmerTest)
library(wordcloud) # these 3 for the word clouds
library(RColorBrewer)
library(tm)

2 Data cleaning

Show the code
# source("clean_data_st1.R") 
# for data protection reasons, we provide the cleaned data sets here where potentially sensitive variables were dropped (see "clean_data_st1.R" for details)
base::load("data/df_sbsa.rda")

Also need this list of the Big Five traits:

Show the code
### BFI-2 - Traits
b5t_extraversion = c("_01", "_06", "_11", "_16", "_21", "_26", 
                     "_31", "_36", "_41", "_46", "_51", "_56")
b5t_agreeableness = c("_02", "_07", "_12", "_17", "_22", "_27", 
                      "_32", "_37", "_42", "_47", "_52", "_57")
b5t_conscientiousness = c("_03", "_08", "_13", "_18", "_23", "_28", 
                          "_33", "_38", "_43", "_48", "_53", "_58")
b5t_neuroticism = c("_04", "_09", "_14", "_19", "_24", "_29", 
                    "_34", "_39", "_44", "_49", "_54", "_59")
b5t_openness = c("_05", "_10", "_15", "_20", "_25", "_30", 
                 "_35", "_40", "_45", "_50", "_55", "_60")
### BFI-2 - Facets
# facets of extraversion
b5f_sociability = c("_01", "_16", "_31", "_46") 
b5f_assertiveness = c("_06", "_21", "_36", "_51")
b5f_energy = c("_11", "_26", "_41", "_56")
# facets of agreeableness
b5f_compassion = c("_02", "_17", "_32", "_47")
b5f_respectfulness = c("_07", "_22", "_37", "_52")
b5f_trust = c("_12", "_27", "_42", "_57")
# facets of conscientiousness
b5f_organization = c("_03", "_18", "_33", "_48")
b5f_productiveness = c("_08", "_23", "_38", "_53")
b5f_responsibility = c("_13", "_28", "_43", "_58")
# facets of neuroticism
b5f_anxiety = c("_04", "_19", "_34", "_49")
b5f_depression = c("_09", "_24", "_39", "_54")
b5f_volatility = c("_14", "_29", "_44", "_59")
# facets of openness
b5f_curiosity = c("_10", "_25", "_40", "_55")
b5f_aesthetic = c("_05", "_20", "_35", "_50")
b5f_imagination = c("_15", "_30", "_45", "_60")

# add keys list (to indicate reverse scoring) - unfortunately this does not work (for the facets) automatically with psych function
keys_extraversion = c("+", "+", "-", "-", "+", "-", "-", "-", "+", "+", "-", "+")
keys_agreeableness = c("+", "+", "-", "-", "-", "+", "+", "-", "-", "-", "+", "+")
keys_conscientiousness = c("-", "-", "+", "+", "-", "-", "+", "+", "+", "-", "+", "-")
keys_neuroticism = c("-", "-", "+", "+", "-", "-", "+", "+", "-", "-", "+", "+")
keys_openness = c("-", "+", "+", "+", "-", "-", "+", "+", "-", "-", "-", "+")
# facets of extraversion
keys_sociability = c("+", "-", "-", "+") 
keys_assertiveness = c("+", "+", "-", "-")
keys_energy = c("-", "-", "+", "+")
# facets of agreeableness
keys_compassion = c("+", "-", "+", "-")
keys_respectfulness = c("+", "-", "-", "+")
keys_trust = c("-", "+", "-", "+")
# facets of conscientiousness
keys_organization = c("-", "+", "+", "-")
keys_productiveness = c("-", "-", "+", "+")
keys_responsibility = c("+", "-", "+", "-")
# facets of neuroticism
keys_anxiety = c("-", "+", "+", "-")
keys_depression = c("-", "-", "+", "+")
keys_volatility = c("+", "-", "-", "+")
# facets of openness
keys_curiosity = c("+", "-", "+", "-")
keys_aesthetic = c("-", "+", "+", "-")
keys_imagination = c("+", "-", "-", "+")

b5_vars <- list(list(b5t_extraversion, keys_extraversion), 
                list(b5t_agreeableness, keys_agreeableness), 
                list(b5t_conscientiousness, keys_conscientiousness), 
                list(b5t_neuroticism, keys_neuroticism), 
                list(b5t_openness, keys_openness),
                list(b5f_sociability, keys_sociability), 
                list(b5f_assertiveness, keys_assertiveness), 
                list(b5f_energy, keys_energy), 
                list(b5f_compassion, keys_compassion), 
                list(b5f_respectfulness, keys_respectfulness), 
                list(b5f_trust, keys_trust),
                list(b5f_organization, keys_organization), 
                list(b5f_productiveness, keys_productiveness), 
                list(b5f_responsibility, keys_responsibility),
                list(b5f_anxiety, keys_anxiety), 
                list(b5f_depression, keys_depression), 
                list(b5f_volatility, keys_volatility),
                list(b5f_curiosity, keys_curiosity), 
                list(b5f_aesthetic, keys_aesthetic), 
                list(b5f_imagination, keys_imagination))
names(b5_vars) = c("extraversion", "agreeableness", "conscientiousness", "neuroticism", "openness",
                   "sociability", "assertiveness", "energy", 
                   "compassion", "respectfulness", "trust",
                   "organization", "productiveness", "responsibility",
                   "anxiety", "depression", "volatility",
                   "curiosity", "aesthetic", "imagination")

bfi_versions <- list("bf01", "bf02", "bf03", "bf04",
                     "bf05", "bf06") 
names(bfi_versions) <- c("pre_curr", "pre_ideal", "post_curr", "post_ideal",
                         "comb_curr", "comb_ideal")

3 Create item parcels

3.1 Well-being measures

Reshape data

Show the code
df_sbsa_wide_wb <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, rando, starts_with(c("sw06", "ml01", "rs01", "sc01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("sw06", "ml01", "rs01", "sc01")))
# colnames(df_sbsa_wide_wb)

3.1.1 Meaning in life

Check CFA item loadings at T1

cfa_meaning <- '
# Define the latent factors
meaning1 =~ NA*ml01_01_t1 + lambda1*ml01_01_t1 + lambda2*ml01_02_t1 + lambda3*ml01_03_t1 + lambda4*ml01_04_t1 + lambda5*ml01_05_t1 + lambda6*ml01_06_t1 + lambda7*ml01_07_t1 + lambda8*ml01_08_t1 + lambda9*ml01_09_t1 + lambda10*ml01_10_t1

# Intercepts
ml01_01_t1 ~ i1*1
ml01_02_t1 ~ 1
ml01_03_t1 ~ 1
ml01_04_t1 ~ 1
ml01_05_t1 ~ 1
ml01_06_t1 ~ 1
ml01_07_t1 ~ 1
ml01_08_t1 ~ 1
ml01_09_t1 ~ 1
ml01_10_t1 ~ 1

# Unique Variances
ml01_01_t1 ~~ ml01_01_t1
ml01_02_t1 ~~ ml01_02_t1
ml01_03_t1 ~~ ml01_03_t1
ml01_04_t1 ~~ ml01_04_t1
ml01_05_t1 ~~ ml01_05_t1
ml01_06_t1 ~~ ml01_06_t1
ml01_07_t1 ~~ ml01_07_t1
ml01_08_t1 ~~ ml01_08_t1
ml01_09_t1 ~~ ml01_09_t1
ml01_10_t1 ~~ ml01_10_t1

# Latent Variable Means
meaning1 ~ 0*1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
'
fit_cfa_meaning <- cfa(cfa_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_meaning, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 36 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           697         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                              2033.788
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              4515.632
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.553
  Tucker-Lewis Index (TLI)                       0.425
                                                      
  Robust Comparative Fit Index (CFI)             0.553
  Robust Tucker-Lewis Index (TLI)                0.425

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12063.842
  Loglikelihood unrestricted model (H1)     -11046.948
                                                      
  Akaike (AIC)                               24187.684
  Bayesian (BIC)                             24324.088
  Sample-size adjusted Bayesian (SABIC)      24228.832

Root Mean Square Error of Approximation:

  RMSEA                                          0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.297
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.286
  90 Percent confidence interval - lower         0.276
  90 Percent confidence interval - upper         0.297
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.229

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  meaning1 =~                                         
    m01_01_ (lmb1)    1.355    0.053   25.543    0.000
    m01_02_ (lmb2)   -0.392    0.057   -6.855    0.000
    m01_03_ (lmb3)   -0.224    0.062   -3.631    0.000
    m01_04_ (lmb4)    1.513    0.052   28.862    0.000
    m01_05_ (lmb5)    1.340    0.053   25.155    0.000
    m01_06_ (lmb6)    1.440    0.054   26.620    0.000
    m01_07_ (lmb7)   -0.199    0.059   -3.396    0.001
    m01_08_ (lmb8)   -0.346    0.063   -5.490    0.000
    m01_09_ (lmb9)   -1.440    0.062  -23.048    0.000
    m01_10_ (lm10)   -0.720    0.062  -11.555    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_1 (i1)    4.175    0.063   66.262    0.000
   .ml01_02_1         5.365    0.055   97.095    0.000
   .ml01_03_1         5.033    0.059   85.888    0.000
   .ml01_04_1         3.857    0.065   59.286    0.000
   .ml01_05_1         4.387    0.063   69.727    0.000
   .ml01_06_1         3.891    0.065   59.699    0.000
   .ml01_07_1         5.026    0.056   90.101    0.000
   .ml01_08_1         4.984    0.060   82.648    0.000
   .ml01_09_1         3.898    0.072   54.299    0.000
   .ml01_10_1         4.927    0.062   79.130    0.000
    meaning1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .ml01_01_t1        0.931    0.061   15.370    0.000
   .ml01_02_t1        1.972    0.107   18.491    0.000
   .ml01_03_t1        2.343    0.126   18.620    0.000
   .ml01_04_t1        0.660    0.052   12.713    0.000
   .ml01_05_t1        0.964    0.062   15.528    0.000
   .ml01_06_t1        0.888    0.060   14.738    0.000
   .ml01_07_t1        2.129    0.114   18.628    0.000
   .ml01_08_t1        2.415    0.130   18.554    0.000
   .ml01_09_t1        1.518    0.093   16.374    0.000
   .ml01_10_t1        2.184    0.120   18.155    0.000
    meaning1          1.000                           
tidy(fit_cfa_meaning) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 meaning1 =~ ml01_04_t1 =~    lambda4     1.51     0.0524   0.881
 2 meaning1 =~ ml01_09_t1 =~    lambda9    -1.44     0.0625  -0.760
 3 meaning1 =~ ml01_06_t1 =~    lambda6     1.44     0.0541   0.837
 4 meaning1 =~ ml01_01_t1 =~    lambda1     1.35     0.0530   0.815
 5 meaning1 =~ ml01_05_t1 =~    lambda5     1.34     0.0533   0.807
 6 meaning1 =~ ml01_10_t1 =~    lambda10   -0.720    0.0623  -0.438
 7 meaning1 =~ ml01_02_t1 =~    lambda2    -0.392    0.0571  -0.269
 8 meaning1 =~ ml01_08_t1 =~    lambda8    -0.346    0.0631  -0.218
 9 meaning1 =~ ml01_03_t1 =~    lambda3    -0.224    0.0617  -0.145
10 meaning1 =~ ml01_07_t1 =~    lambda7    -0.199    0.0587  -0.135

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate(ml01_09_t1_r = ml01_09_t1,
         ml01_10_t1_r = ml01_10_t1,
         ml01_02_t1_r = ml01_02_t1,
         ml01_08_t1_r = ml01_08_t1,
         ml01_07_t1_r = ml01_07_t1,
         ml01_03_t1_r = ml01_03_t1,
         ml01_09_t2_r = ml01_09_t2,
         ml01_10_t2_r = ml01_10_t2,
         ml01_02_t2_r = ml01_02_t2,
         ml01_08_t2_r = ml01_08_t2,
         ml01_07_t2_r = ml01_07_t2,
         ml01_03_t2_r = ml01_03_t2) %>% 
  mutate(across(intersect(starts_with("ml01"), ends_with("_r")), 
                ~ recode(.x, `1` = 7L, `2` = 6L, `3` = 5L, `4` = 4L, `5` = 3L, `6` = 2L, `7` = 1L, .default = NA_integer_))) %>% 
  mutate(meaning_par1_t1 = rowMeans(across(c(ml01_04_t1, ml01_10_t1_r, ml01_03_t1_r, ml01_07_t1_r)), na.rm=T),
         meaning_par2_t1 = rowMeans(across(c(ml01_09_t1_r, ml01_05_t1, ml01_08_t1_r)), na.rm=T),
         meaning_par3_t1 = rowMeans(across(c(ml01_06_t1, ml01_01_t1, ml01_02_t1_r)), na.rm=T),
         meaning_par1_t2 = rowMeans(across(c(ml01_04_t2, ml01_10_t2_r, ml01_03_t2_r, ml01_07_t2_r)), na.rm=T),
         meaning_par2_t2 = rowMeans(across(c(ml01_09_t2_r, ml01_05_t2, ml01_08_t2_r)), na.rm=T),
         meaning_par3_t2 = rowMeans(across(c(ml01_06_t2, ml01_01_t2, ml01_02_t2_r)), na.rm=T))

3.1.2 Self-esteem

Check CFA item loadings at T1

cfa_selfes <- '
# Define the latent factors
selfes1 =~ NA*rs01_01_t1 + lambda1*rs01_01_t1 + lambda2*rs01_02_t1 + lambda3*rs01_03_t1 + lambda4*rs01_04_t1 + lambda5*rs01_05_t1 + lambda6*rs01_06_t1 + lambda7*rs01_07_t1 + lambda8*rs01_08_t1 + lambda9*rs01_09_t1 + lambda10*rs01_10_t1

# Intercepts
rs01_01_t1 ~ i1*1
rs01_02_t1 ~ 1
rs01_03_t1 ~ 1
rs01_04_t1 ~ 1
rs01_05_t1 ~ 1
rs01_06_t1 ~ 1
rs01_07_t1 ~ 1
rs01_08_t1 ~ 1
rs01_09_t1 ~ 1
rs01_10_t1 ~ 1

# Unique Variances
rs01_01_t1 ~~ rs01_01_t1
rs01_02_t1 ~~ rs01_02_t1
rs01_03_t1 ~~ rs01_03_t1
rs01_04_t1 ~~ rs01_04_t1
rs01_05_t1 ~~ rs01_05_t1
rs01_06_t1 ~~ rs01_06_t1
rs01_07_t1 ~~ rs01_07_t1
rs01_08_t1 ~~ rs01_08_t1
rs01_09_t1 ~~ rs01_09_t1
rs01_10_t1 ~~ rs01_10_t1

# Latent Variable Means
selfes1 ~ 0*1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
'
fit_cfa_selfes <- cfa(cfa_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_selfes, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 14 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        30

                                                  Used       Total
  Number of observations                           697         715
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               503.552
  Degrees of freedom                                35
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3492.047
  Degrees of freedom                                45
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.864
  Tucker-Lewis Index (TLI)                       0.825
                                                      
  Robust Comparative Fit Index (CFI)             0.864
  Robust Tucker-Lewis Index (TLI)                0.825

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -9587.382
  Loglikelihood unrestricted model (H1)      -9335.606
                                                      
  Akaike (AIC)                               19234.764
  Bayesian (BIC)                             19371.168
  Sample-size adjusted Bayesian (SABIC)      19275.912

Root Mean Square Error of Approximation:

  RMSEA                                          0.139
  90 Percent confidence interval - lower         0.128
  90 Percent confidence interval - upper         0.149
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.139
  90 Percent confidence interval - lower         0.128
  90 Percent confidence interval - upper         0.149
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.066

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  selfes1 =~                                          
    r01_01_ (lmb1)    0.881    0.041   21.562    0.000
    r01_02_ (lmb2)   -0.941    0.046  -20.624    0.000
    r01_03_ (lmb3)    0.516    0.033   15.679    0.000
    r01_04_ (lmb4)    0.619    0.036   17.043    0.000
    r01_05_ (lmb5)   -0.875    0.045  -19.595    0.000
    r01_06_ (lmb6)   -1.033    0.045  -23.146    0.000
    r01_07_ (lmb7)    0.674    0.038   17.791    0.000
    r01_08_ (lmb8)   -0.554    0.046  -12.021    0.000
    r01_09_ (lmb9)   -1.086    0.043  -25.135    0.000
    r01_10_ (lm10)    0.995    0.039   25.685    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_1 (i1)    2.947    0.046   64.218    0.000
   .rs01_02_1         3.340    0.050   66.153    0.000
   .rs01_03_1         3.947    0.034  115.122    0.000
   .rs01_04_1         3.789    0.038   98.424    0.000
   .rs01_05_1         2.898    0.049   59.213    0.000
   .rs01_06_1         3.323    0.051   65.133    0.000
   .rs01_07_1         3.627    0.040   89.658    0.000
   .rs01_08_1         3.854    0.047   82.849    0.000
   .rs01_09_1         2.692    0.051   52.878    0.000
   .rs01_10_1         3.209    0.046   69.858    0.000
    selfes1           0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .rs01_01_t1        0.692    0.042   16.574    0.000
   .rs01_02_t1        0.890    0.054   16.595    0.000
   .rs01_03_t1        0.553    0.031   17.626    0.000
   .rs01_04_t1        0.649    0.037   17.455    0.000
   .rs01_05_t1        0.904    0.053   17.076    0.000
   .rs01_06_t1        0.746    0.048   15.672    0.000
   .rs01_07_t1        0.687    0.040   17.291    0.000
   .rs01_08_t1        1.201    0.066   18.189    0.000
   .rs01_09_t1        0.626    0.041   15.162    0.000
   .rs01_10_t1        0.481    0.033   14.759    0.000
    selfes1           1.000                           
tidy(fit_cfa_selfes) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 10 × 6
   term                  op    label    estimate std.error std.all
   <chr>                 <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 selfes1 =~ rs01_09_t1 =~    lambda9    -1.09     0.0432  -0.808
 2 selfes1 =~ rs01_06_t1 =~    lambda6    -1.03     0.0446  -0.767
 3 selfes1 =~ rs01_10_t1 =~    lambda10    0.995    0.0387   0.820
 4 selfes1 =~ rs01_02_t1 =~    lambda2    -0.941    0.0456  -0.706
 5 selfes1 =~ rs01_01_t1 =~    lambda1     0.881    0.0408   0.727
 6 selfes1 =~ rs01_05_t1 =~    lambda5    -0.875    0.0447  -0.677
 7 selfes1 =~ rs01_07_t1 =~    lambda7     0.674    0.0379   0.631
 8 selfes1 =~ rs01_04_t1 =~    lambda4     0.619    0.0363   0.609
 9 selfes1 =~ rs01_08_t1 =~    lambda8    -0.554    0.0461  -0.451
10 selfes1 =~ rs01_03_t1 =~    lambda3     0.516    0.0329   0.570

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate(rs01_09_t1_r = rs01_09_t1,
         rs01_06_t1_r = rs01_06_t1,
         rs01_02_t1_r = rs01_02_t1,
         rs01_05_t1_r = rs01_05_t1,
         rs01_08_t1_r = rs01_08_t1,
         rs01_09_t2_r = rs01_09_t2,
         rs01_06_t2_r = rs01_06_t2,
         rs01_02_t2_r = rs01_02_t2,
         rs01_05_t2_r = rs01_05_t2,
         rs01_08_t2_r = rs01_08_t2) %>% 
  mutate(across(intersect(starts_with("rs01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(selfes_par1_t1 = rowMeans(across(c(rs01_09_t1_r, rs01_05_t1_r, rs01_08_t1_r, rs01_03_t1)), na.rm=T),
         selfes_par2_t1 = rowMeans(across(c(rs01_06_t1_r, rs01_01_t1, rs01_04_t1)), na.rm=T),
         selfes_par3_t1 = rowMeans(across(c(rs01_10_t1, rs01_02_t1_r, rs01_07_t1)), na.rm=T),
         selfes_par1_t2 = rowMeans(across(c(rs01_09_t2_r, rs01_05_t2_r, rs01_08_t2_r, rs01_03_t2)), na.rm=T),
         selfes_par2_t2 = rowMeans(across(c(rs01_06_t2_r, rs01_01_t2, rs01_04_t2)), na.rm=T),
         selfes_par3_t2 = rowMeans(across(c(rs01_10_t2, rs01_02_t2_r, rs01_07_t2)), na.rm=T))

3.1.3 Self-concept clarity

Check CFA item loadings at T1

cfa_concept <- '
# Define the latent factors
concept1 =~ NA*sc01_01_t1 + lambda1*sc01_01_t1 + lambda2*sc01_02_t1 + lambda3*sc01_03_t1 + lambda4*sc01_04_t1 + lambda5*sc01_05_t1 + lambda6*sc01_06_t1 + lambda7*sc01_07_t1 + lambda8*sc01_08_t1 + lambda9*sc01_09_t1 + lambda10*sc01_10_t1 + lambda11*sc01_11_t1 + lambda12*sc01_12_t1

# Intercepts
sc01_01_t1 ~ i1*1
sc01_02_t1 ~ 1
sc01_03_t1 ~ 1
sc01_04_t1 ~ 1
sc01_05_t1 ~ 1
sc01_06_t1 ~ 1
sc01_07_t1 ~ 1
sc01_08_t1 ~ 1
sc01_09_t1 ~ 1
sc01_10_t1 ~ 1
sc01_11_t1 ~ 1
sc01_12_t1 ~ 1

# Unique Variances
sc01_01_t1 ~~ sc01_01_t1
sc01_02_t1 ~~ sc01_02_t1
sc01_03_t1 ~~ sc01_03_t1
sc01_04_t1 ~~ sc01_04_t1
sc01_05_t1 ~~ sc01_05_t1
sc01_06_t1 ~~ sc01_06_t1
sc01_07_t1 ~~ sc01_07_t1
sc01_08_t1 ~~ sc01_08_t1
sc01_09_t1 ~~ sc01_09_t1
sc01_10_t1 ~~ sc01_10_t1
sc01_11_t1 ~~ sc01_11_t1
sc01_12_t1 ~~ sc01_12_t1

# Latent Variable Means
concept1 ~ 0*1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
'
fit_cfa_concept <- cfa(cfa_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_cfa_concept, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 37 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           697         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               399.384
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3266.666
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.892
  Tucker-Lewis Index (TLI)                       0.868
                                                      
  Robust Comparative Fit Index (CFI)             0.892
  Robust Tucker-Lewis Index (TLI)                0.868

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12476.420
  Loglikelihood unrestricted model (H1)     -12276.727
                                                      
  Akaike (AIC)                               25024.839
  Bayesian (BIC)                             25188.523
  Sample-size adjusted Bayesian (SABIC)      25074.217

Root Mean Square Error of Approximation:

  RMSEA                                          0.096
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.105
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.096
  90 Percent confidence interval - lower         0.087
  90 Percent confidence interval - upper         0.105
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.999

Standardized Root Mean Square Residual:

  SRMR                                           0.048

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  concept1 =~                                         
    s01_01_ (lmb1)    0.817    0.043   18.924    0.000
    s01_02_ (lmb2)    0.949    0.045   21.141    0.000
    s01_03_ (lmb3)    0.751    0.046   16.392    0.000
    s01_04_ (lmb4)    0.851    0.045   18.729    0.000
    s01_05_ (lmb5)    0.751    0.048   15.623    0.000
    s01_06_ (lmb6)    0.052    0.047    1.104    0.270
    s01_07_ (lmb7)    0.741    0.049   15.064    0.000
    s01_08_ (lmb8)    0.996    0.042   23.772    0.000
    s01_09_ (lmb9)    1.038    0.044   23.459    0.000
    s01_10_ (lm10)    0.850    0.047   18.256    0.000
    s01_11_ (lm11)   -0.687    0.042  -16.443    0.000
    s01_12_ (lm12)    0.828    0.046   17.918    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_1 (i1)    3.232    0.047   69.254    0.000
   .sc01_02_1         3.485    0.050   69.942    0.000
   .sc01_03_1         3.354    0.048   69.815    0.000
   .sc01_04_1         3.301    0.049   67.480    0.000
   .sc01_05_1         2.981    0.050   59.621    0.000
   .sc01_06_1         2.927    0.045   65.525    0.000
   .sc01_07_1         2.780    0.051   54.610    0.000
   .sc01_08_1         2.772    0.048   57.506    0.000
   .sc01_09_1         2.852    0.051   56.279    0.000
   .sc01_10_1         2.941    0.050   59.017    0.000
   .sc01_11_1         3.224    0.044   73.560    0.000
   .sc01_12_1         3.116    0.049   63.125    0.000
    concept1          0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .sc01_01_t1        0.851    0.050   16.949    0.000
   .sc01_02_t1        0.831    0.051   16.250    0.000
   .sc01_03_t1        1.045    0.060   17.490    0.000
   .sc01_04_t1        0.945    0.056   16.952    0.000
   .sc01_05_t1        1.179    0.067   17.620    0.000
   .sc01_06_t1        1.388    0.074   18.664    0.000
   .sc01_07_t1        1.258    0.071   17.756    0.000
   .sc01_08_t1        0.627    0.041   15.179    0.000
   .sc01_09_t1        0.713    0.046   15.377    0.000
   .sc01_10_t1        1.009    0.059   17.051    0.000
   .sc01_11_t1        0.867    0.050   17.481    0.000
   .sc01_12_t1        1.012    0.059   17.197    0.000
    concept1          1.000                           
tidy(fit_cfa_concept) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                   op    label    estimate std.error std.all
   <chr>                  <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 concept1 =~ sc01_09_t1 =~    lambda9    1.04      0.0442  0.776 
 2 concept1 =~ sc01_08_t1 =~    lambda8    0.996     0.0419  0.783 
 3 concept1 =~ sc01_02_t1 =~    lambda2    0.949     0.0449  0.721 
 4 concept1 =~ sc01_04_t1 =~    lambda4    0.851     0.0454  0.659 
 5 concept1 =~ sc01_10_t1 =~    lambda10   0.850     0.0465  0.646 
 6 concept1 =~ sc01_12_t1 =~    lambda12   0.828     0.0462  0.635 
 7 concept1 =~ sc01_01_t1 =~    lambda1    0.817     0.0432  0.663 
 8 concept1 =~ sc01_05_t1 =~    lambda5    0.751     0.0481  0.569 
 9 concept1 =~ sc01_03_t1 =~    lambda3    0.751     0.0458  0.592 
10 concept1 =~ sc01_07_t1 =~    lambda7    0.741     0.0492  0.551 
11 concept1 =~ sc01_11_t1 =~    lambda11  -0.687     0.0418 -0.593 
12 concept1 =~ sc01_06_t1 =~    lambda6    0.0520    0.0471  0.0441

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_wb <- df_sbsa_wide_wb %>% # based on the item content, it makes more sense here to recode all except sc01_11
  mutate(sc01_01_t1_r = sc01_01_t1,
         sc01_02_t1_r = sc01_02_t1,
         sc01_03_t1_r = sc01_03_t1,
         sc01_04_t1_r = sc01_04_t1,
         sc01_05_t1_r = sc01_05_t1,
         sc01_06_t1_r = sc01_06_t1,
         sc01_07_t1_r = sc01_07_t1,
         sc01_08_t1_r = sc01_08_t1,
         sc01_09_t1_r = sc01_09_t1,
         sc01_10_t1_r = sc01_10_t1,
         sc01_12_t1_r = sc01_12_t1,
         sc01_01_t2_r = sc01_01_t2,
         sc01_02_t2_r = sc01_02_t2,
         sc01_03_t2_r = sc01_03_t2,
         sc01_04_t2_r = sc01_04_t2,
         sc01_05_t2_r = sc01_05_t2,
         sc01_06_t2_r = sc01_06_t2,
         sc01_07_t2_r = sc01_07_t2,
         sc01_08_t2_r = sc01_08_t2,
         sc01_09_t2_r = sc01_09_t2,
         sc01_10_t2_r = sc01_10_t2,
         sc01_12_t2_r = sc01_12_t2) %>% 
  mutate(across(intersect(starts_with("sc01"), ends_with("_r")), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(concept_par1_t1 = rowMeans(across(c(sc01_09_t1_r, sc01_12_t1_r, sc01_03_t1_r, sc01_06_t1_r)), na.rm=T),
         concept_par2_t1 = rowMeans(across(c(sc01_08_t1_r, sc01_10_t1_r, sc01_05_t1_r, sc01_11_t1)), na.rm=T),
         concept_par3_t1 = rowMeans(across(c(sc01_02_t1_r, sc01_04_t1_r, sc01_01_t1_r, sc01_07_t1_r)), na.rm=T),
         concept_par1_t2 = rowMeans(across(c(sc01_09_t2_r, sc01_12_t2_r, sc01_03_t2_r, sc01_06_t2_r)), na.rm=T),
         concept_par2_t2 = rowMeans(across(c(sc01_08_t2_r, sc01_10_t2_r, sc01_05_t2_r, sc01_11_t2)), na.rm=T),
         concept_par3_t2 = rowMeans(across(c(sc01_02_t2_r, sc01_04_t2_r, sc01_01_t2_r, sc01_07_t2_r)), na.rm=T))

# replace NaN with regular NA
df_sbsa_wide_wb <- df_sbsa_wide_wb %>% 
  mutate_all(~ifelse(is.nan(.), NA, .))

3.2 Big Five

Show the code
df_sbsa_wide_pers <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("bf05", "bf06"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = starts_with(c("bf05", "bf06")))
# colnames(df_sbsa_wide_pers)

3.2.1 Extraversion - current personality

Check CFA item loadings at T1

cfa_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*bf05_01_t1 + lambda1*bf05_01_t1 + lambda2*bf05_06_t1 + lambda3*bf05_11_t1 + lambda4*bf05_16_t1 + lambda5*bf05_21_t1 + lambda6*bf05_26_t1 + lambda7*bf05_31_t1 + lambda8*bf05_36_t1 + lambda9*bf05_41_t1 + lambda10*bf05_46_t1 + lambda11*bf05_51_t1 + lambda12*bf05_56_t1

# Intercepts
bf05_01_t1 ~ i1*1
bf05_06_t1 ~ 1
bf05_11_t1 ~ 1
bf05_16_t1 ~ 1
bf05_21_t1 ~ 1
bf05_26_t1 ~ 1
bf05_31_t1 ~ 1
bf05_36_t1 ~ 1
bf05_41_t1 ~ 1
bf05_46_t1 ~ 1
bf05_51_t1 ~ 1
bf05_56_t1 ~ 1

# Unique Variances
bf05_01_t1 ~~ bf05_01_t1
bf05_06_t1 ~~ bf05_06_t1
bf05_11_t1 ~~ bf05_11_t1
bf05_16_t1 ~~ bf05_16_t1
bf05_21_t1 ~~ bf05_21_t1
bf05_26_t1 ~~ bf05_26_t1
bf05_31_t1 ~~ bf05_31_t1
bf05_36_t1 ~~ bf05_36_t1
bf05_41_t1 ~~ bf05_41_t1
bf05_46_t1 ~~ bf05_46_t1
bf05_51_t1 ~~ bf05_51_t1
bf05_56_t1 ~~ bf05_56_t1

# Latent Variable Means
extra_curr1 ~ 0*1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
'
fit_cfa_extra_curr <- cfa(cfa_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 33 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               684.334
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              2531.434
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.744
  Tucker-Lewis Index (TLI)                       0.688
                                                      
  Robust Comparative Fit Index (CFI)             0.744
  Robust Tucker-Lewis Index (TLI)                0.688

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12568.224
  Loglikelihood unrestricted model (H1)     -12226.057
                                                      
  Akaike (AIC)                               25208.448
  Bayesian (BIC)                             25372.492
  Sample-size adjusted Bayesian (SABIC)      25258.184

Root Mean Square Error of Approximation:

  RMSEA                                          0.129
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.137
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.129
  90 Percent confidence interval - lower         0.120
  90 Percent confidence interval - upper         0.137
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.075

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_curr1 =~                                      
    b05_01_ (lmb1)    0.905    0.045   19.964    0.000
    b05_06_ (lmb2)    0.558    0.043   12.961    0.000
    b05_11_ (lmb3)   -0.288    0.047   -6.054    0.000
    b05_16_ (lmb4)   -0.681    0.044  -15.352    0.000
    b05_21_ (lmb5)    0.745    0.048   15.388    0.000
    b05_26_ (lmb6)   -0.574    0.051  -11.172    0.000
    b05_31_ (lmb7)   -0.695    0.040  -17.580    0.000
    b05_36_ (lmb8)   -0.525    0.044  -12.035    0.000
    b05_41_ (lmb9)    0.746    0.044   17.053    0.000
    b05_46_ (lm10)    0.855    0.048   17.778    0.000
    b05_51_ (lm11)   -0.569    0.047  -12.063    0.000
    b05_56_ (lm12)    0.621    0.041   15.025    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_1 (i1)    2.722    0.048   56.269    0.000
   .bf05_06_1         3.058    0.042   72.063    0.000
   .bf05_11_1         2.707    0.044   61.144    0.000
   .bf05_16_1         3.828    0.044   87.153    0.000
   .bf05_21_1         2.733    0.049   56.110    0.000
   .bf05_26_1         3.129    0.049   63.404    0.000
   .bf05_31_1         4.034    0.041   99.348    0.000
   .bf05_36_1         3.161    0.043   74.131    0.000
   .bf05_41_1         2.852    0.045   63.934    0.000
   .bf05_46_1         2.956    0.050   59.442    0.000
   .bf05_51_1         3.178    0.046   69.273    0.000
   .bf05_56_1         3.224    0.041   78.112    0.000
    extr_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_01_t1        0.828    0.054   15.325    0.000
   .bf05_06_t1        0.956    0.054   17.635    0.000
   .bf05_11_t1        1.298    0.070   18.537    0.000
   .bf05_16_t1        0.895    0.054   16.468    0.000
   .bf05_21_t1        1.115    0.066   16.906    0.000
   .bf05_26_t1        1.385    0.078   17.831    0.000
   .bf05_31_t1        0.678    0.042   15.964    0.000
   .bf05_36_t1        1.004    0.056   17.813    0.000
   .bf05_41_t1        0.843    0.052   16.106    0.000
   .bf05_46_t1        1.009    0.063   16.048    0.000
   .bf05_51_t1        1.157    0.065   17.724    0.000
   .bf05_56_t1        0.814    0.048   16.935    0.000
    extra_curr1       1.000                           
tidy(fit_cfa_extra_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_curr1 =~ bf05_01_t1 =~    lambda1     0.905    0.0453   0.705
 2 extra_curr1 =~ bf05_46_t1 =~    lambda10    0.855    0.0481   0.648
 3 extra_curr1 =~ bf05_41_t1 =~    lambda9     0.746    0.0438   0.631
 4 extra_curr1 =~ bf05_21_t1 =~    lambda5     0.745    0.0484   0.577
 5 extra_curr1 =~ bf05_31_t1 =~    lambda7    -0.695    0.0395  -0.645
 6 extra_curr1 =~ bf05_16_t1 =~    lambda4    -0.681    0.0443  -0.584
 7 extra_curr1 =~ bf05_56_t1 =~    lambda12    0.621    0.0413   0.567
 8 extra_curr1 =~ bf05_26_t1 =~    lambda6    -0.574    0.0514  -0.439
 9 extra_curr1 =~ bf05_51_t1 =~    lambda11   -0.569    0.0472  -0.468
10 extra_curr1 =~ bf05_06_t1 =~    lambda2     0.558    0.0431   0.496
11 extra_curr1 =~ bf05_36_t1 =~    lambda8    -0.525    0.0436  -0.464
12 extra_curr1 =~ bf05_11_t1 =~    lambda3    -0.288    0.0475  -0.245

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_31_t1_r = bf05_31_t1,
         bf05_16_t1_r = bf05_16_t1,
         bf05_26_t1_r = bf05_26_t1,
         bf05_51_t1_r = bf05_51_t1,
         bf05_36_t1_r = bf05_36_t1,
         bf05_11_t1_r = bf05_11_t1,
         bf05_31_t2_r = bf05_31_t2,
         bf05_16_t2_r = bf05_16_t2,
         bf05_26_t2_r = bf05_26_t2,
         bf05_51_t2_r = bf05_51_t2,
         bf05_36_t2_r = bf05_36_t2,
         bf05_11_t2_r = bf05_11_t2) %>% 
  mutate(across(c(bf05_31_t1_r, bf05_16_t1_r, bf05_26_t1_r, bf05_51_t1_r, bf05_36_t1_r, bf05_11_t1_r, 
                  bf05_31_t2_r, bf05_16_t2_r, bf05_26_t2_r, bf05_51_t2_r, bf05_36_t2_r, bf05_11_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_curr_par1_t1 = rowMeans(across(c(bf05_01_t1, bf05_16_t1_r, bf05_51_t1_r, bf05_11_t1_r)), na.rm=T),
         extra_curr_par2_t1 = rowMeans(across(c(bf05_46_t1, bf05_31_t1_r, bf05_26_t1_r, bf05_36_t1_r)), na.rm=T),
         extra_curr_par3_t1 = rowMeans(across(c(bf05_41_t1, bf05_21_t1, bf05_56_t1, bf05_06_t1)), na.rm=T),
         extra_curr_par1_t2 = rowMeans(across(c(bf05_01_t2, bf05_16_t2_r, bf05_51_t2_r, bf05_11_t2_r)), na.rm=T),
         extra_curr_par2_t2 = rowMeans(across(c(bf05_46_t2, bf05_31_t2_r, bf05_26_t2_r, bf05_36_t2_r)), na.rm=T),
         extra_curr_par3_t2 = rowMeans(across(c(bf05_41_t2, bf05_21_t2, bf05_56_t2, bf05_06_t2)), na.rm=T))

3.2.2 Extraversion - ideal personality

Check CFA item loadings at T1

cfa_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*bf06_01_t1 + lambda1*bf06_01_t1 + lambda2*bf06_06_t1 + lambda3*bf06_11_t1 + lambda4*bf06_16_t1 + lambda5*bf06_21_t1 + lambda6*bf06_26_t1 + lambda7*bf06_31_t1 + lambda8*bf06_36_t1 + lambda9*bf06_41_t1 + lambda10*bf06_46_t1 + lambda11*bf06_51_t1 + lambda12*bf06_56_t1

# Intercepts
bf06_01_t1 ~ i1*1
bf06_06_t1 ~ 1
bf06_11_t1 ~ 1
bf06_16_t1 ~ 1
bf06_21_t1 ~ 1
bf06_26_t1 ~ 1
bf06_31_t1 ~ 1
bf06_36_t1 ~ 1
bf06_41_t1 ~ 1
bf06_46_t1 ~ 1
bf06_51_t1 ~ 1
bf06_56_t1 ~ 1

# Unique Variances
bf06_01_t1 ~~ bf06_01_t1
bf06_06_t1 ~~ bf06_06_t1
bf06_11_t1 ~~ bf06_11_t1
bf06_16_t1 ~~ bf06_16_t1
bf06_21_t1 ~~ bf06_21_t1
bf06_26_t1 ~~ bf06_26_t1
bf06_31_t1 ~~ bf06_31_t1
bf06_36_t1 ~~ bf06_36_t1
bf06_41_t1 ~~ bf06_41_t1
bf06_46_t1 ~~ bf06_46_t1
bf06_51_t1 ~~ bf06_51_t1
bf06_56_t1 ~~ bf06_56_t1

# Latent Variable Means
extra_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
'
fit_cfa_extra_ideal <- cfa(cfa_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_extra_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 18 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               352.210
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1114.995
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.716
  Tucker-Lewis Index (TLI)                       0.653
                                                      
  Robust Comparative Fit Index (CFI)             0.716
  Robust Tucker-Lewis Index (TLI)                0.653

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11623.649
  Loglikelihood unrestricted model (H1)     -11447.544
                                                      
  Akaike (AIC)                               23319.298
  Bayesian (BIC)                             23483.342
  Sample-size adjusted Bayesian (SABIC)      23369.034

Root Mean Square Error of Approximation:

  RMSEA                                          0.089
  90 Percent confidence interval - lower         0.080
  90 Percent confidence interval - upper         0.097
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.948
                                                      
  Robust RMSEA                                   0.089
  90 Percent confidence interval - lower         0.080
  90 Percent confidence interval - upper         0.097
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.948

Standardized Root Mean Square Residual:

  SRMR                                           0.063

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  extra_ideal1 =~                                     
    b06_01_ (lmb1)    0.357    0.035   10.233    0.000
    b06_06_ (lmb2)    0.347    0.041    8.503    0.000
    b06_11_ (lmb3)   -0.273    0.061   -4.453    0.000
    b06_16_ (lmb4)   -0.432    0.053   -8.134    0.000
    b06_21_ (lmb5)    0.513    0.045   11.284    0.000
    b06_26_ (lmb6)   -0.464    0.042  -11.163    0.000
    b06_31_ (lmb7)   -0.500    0.045  -10.998    0.000
    b06_36_ (lmb8)   -0.482    0.046  -10.548    0.000
    b06_41_ (lmb9)    0.378    0.031   12.035    0.000
    b06_46_ (lm10)    0.306    0.047    6.526    0.000
    b06_51_ (lm11)   -0.456    0.045  -10.107    0.000
    b06_56_ (lm12)    0.390    0.035   11.269    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_1 (i1)    4.249    0.031  138.630    0.000
   .bf06_06_1         4.099    0.036  114.344    0.000
   .bf06_11_1         2.405    0.052   46.050    0.000
   .bf06_16_1         2.848    0.045   63.380    0.000
   .bf06_21_1         3.798    0.040   94.342    0.000
   .bf06_26_1         1.727    0.037   47.061    0.000
   .bf06_31_1         2.136    0.040   53.820    0.000
   .bf06_36_1         2.190    0.041   53.964    0.000
   .bf06_41_1         4.429    0.028  157.795    0.000
   .bf06_46_1         3.760    0.040   94.031    0.000
   .bf06_51_1         2.392    0.040   59.998    0.000
   .bf06_56_1         4.234    0.031  138.044    0.000
    extra_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_01_t1        0.534    0.032   16.891    0.000
   .bf06_06_t1        0.785    0.044   17.666    0.000
   .bf06_11_t1        1.845    0.100   18.455    0.000
   .bf06_16_t1        1.235    0.071   17.413    0.000
   .bf06_21_t1        0.878    0.053   16.445    0.000
   .bf06_26_t1        0.733    0.045   16.432    0.000
   .bf06_31_t1        0.860    0.053   16.348    0.000
   .bf06_36_t1        0.927    0.055   16.915    0.000
   .bf06_41_t1        0.412    0.026   16.138    0.000
   .bf06_46_t1        1.032    0.057   18.028    0.000
   .bf06_51_t1        0.911    0.053   17.053    0.000
   .bf06_56_t1        0.510    0.031   16.434    0.000
    extra_ideal1      1.000                           
tidy(fit_cfa_extra_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 extra_ideal1 =~ bf06_21_t1 =~    lambda5     0.513    0.0454   0.480
 2 extra_ideal1 =~ bf06_31_t1 =~    lambda7    -0.500    0.0454  -0.474
 3 extra_ideal1 =~ bf06_36_t1 =~    lambda8    -0.482    0.0457  -0.448
 4 extra_ideal1 =~ bf06_26_t1 =~    lambda6    -0.464    0.0416  -0.477
 5 extra_ideal1 =~ bf06_51_t1 =~    lambda11   -0.456    0.0451  -0.431
 6 extra_ideal1 =~ bf06_16_t1 =~    lambda4    -0.432    0.0531  -0.362
 7 extra_ideal1 =~ bf06_56_t1 =~    lambda12    0.390    0.0346   0.480
 8 extra_ideal1 =~ bf06_41_t1 =~    lambda9     0.378    0.0314   0.507
 9 extra_ideal1 =~ bf06_01_t1 =~    lambda1     0.357    0.0349   0.439
10 extra_ideal1 =~ bf06_06_t1 =~    lambda2     0.347    0.0408   0.365
11 extra_ideal1 =~ bf06_46_t1 =~    lambda10    0.306    0.0469   0.289
12 extra_ideal1 =~ bf06_11_t1 =~    lambda3    -0.273    0.0613  -0.197

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_31_t1_r = bf06_31_t1,
         bf06_16_t1_r = bf06_16_t1,
         bf06_26_t1_r = bf06_26_t1,
         bf06_51_t1_r = bf06_51_t1,
         bf06_36_t1_r = bf06_36_t1,
         bf06_11_t1_r = bf06_11_t1,
         bf06_31_t2_r = bf06_31_t2,
         bf06_16_t2_r = bf06_16_t2,
         bf06_26_t2_r = bf06_26_t2,
         bf06_51_t2_r = bf06_51_t2,
         bf06_36_t2_r = bf06_36_t2,
         bf06_11_t2_r = bf06_11_t2) %>% 
  mutate(across(c(bf06_31_t1_r, bf06_16_t1_r, bf06_26_t1_r, bf06_51_t1_r, bf06_36_t1_r, bf06_11_t1_r, 
                  bf06_31_t2_r, bf06_16_t2_r, bf06_26_t2_r, bf06_51_t2_r, bf06_36_t2_r, bf06_11_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(extra_ideal_par1_t1 = rowMeans(across(c(bf06_21_t1, bf06_16_t1_r, bf06_01_t1, bf06_11_t1_r)), na.rm=T),
         extra_ideal_par2_t1 = rowMeans(across(c(bf06_31_t1_r, bf06_51_t1_r, bf06_41_t1, bf06_46_t1)), na.rm=T),
         extra_ideal_par3_t1 = rowMeans(across(c(bf06_36_t1_r, bf06_26_t1_r, bf06_56_t1, bf06_06_t1)), na.rm=T),
         extra_ideal_par1_t2 = rowMeans(across(c(bf06_21_t2, bf06_16_t2_r, bf06_01_t2, bf06_11_t2_r)), na.rm=T),
         extra_ideal_par2_t2 = rowMeans(across(c(bf06_31_t2_r, bf06_51_t2_r, bf06_41_t2, bf06_46_t2)), na.rm=T),
         extra_ideal_par3_t2 = rowMeans(across(c(bf06_36_t2_r, bf06_26_t2_r, bf06_56_t2, bf06_06_t2)), na.rm=T))

3.2.3 Agreeableness - current personality

Check CFA item loadings at T1

cfa_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*bf05_02_t1 + lambda1*bf05_02_t1 + lambda2*bf05_07_t1 + lambda3*bf05_12_t1 + lambda4*bf05_17_t1 + lambda5*bf05_22_t1 + lambda6*bf05_27_t1 + lambda7*bf05_32_t1 + lambda8*bf05_37_t1 + lambda9*bf05_42_t1 + lambda10*bf05_47_t1 + lambda11*bf05_52_t1 + lambda12*bf05_57_t1

# Intercepts
bf05_02_t1 ~ i1*1
bf05_07_t1 ~ 1
bf05_12_t1 ~ 1
bf05_17_t1 ~ 1
bf05_22_t1 ~ 1
bf05_27_t1 ~ 1
bf05_32_t1 ~ 1
bf05_37_t1 ~ 1
bf05_42_t1 ~ 1
bf05_47_t1 ~ 1
bf05_52_t1 ~ 1
bf05_57_t1 ~ 1

# Unique Variances
bf05_02_t1 ~~ bf05_02_t1
bf05_07_t1 ~~ bf05_07_t1
bf05_12_t1 ~~ bf05_12_t1
bf05_17_t1 ~~ bf05_17_t1
bf05_22_t1 ~~ bf05_22_t1
bf05_27_t1 ~~ bf05_27_t1
bf05_32_t1 ~~ bf05_32_t1
bf05_37_t1 ~~ bf05_37_t1
bf05_42_t1 ~~ bf05_42_t1
bf05_47_t1 ~~ bf05_47_t1
bf05_52_t1 ~~ bf05_52_t1
bf05_57_t1 ~~ bf05_57_t1

# Latent Variable Means
agree_curr1 ~ 0*1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
'
fit_cfa_agree_curr <- cfa(cfa_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               397.070
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1779.776
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.800
  Tucker-Lewis Index (TLI)                       0.755
                                                      
  Robust Comparative Fit Index (CFI)             0.800
  Robust Tucker-Lewis Index (TLI)                0.755

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12059.241
  Loglikelihood unrestricted model (H1)     -11860.706
                                                      
  Akaike (AIC)                               24190.482
  Bayesian (BIC)                             24354.526
  Sample-size adjusted Bayesian (SABIC)      24240.218

Root Mean Square Error of Approximation:

  RMSEA                                          0.095
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.104
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.998
                                                      
  Robust RMSEA                                   0.095
  90 Percent confidence interval - lower         0.086
  90 Percent confidence interval - upper         0.104
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.998

Standardized Root Mean Square Residual:

  SRMR                                           0.062

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_curr1 =~                                      
    b05_02_ (lmb1)    0.556    0.036   15.654    0.000
    b05_07_ (lmb2)    0.462    0.029   15.657    0.000
    b05_12_ (lmb3)   -0.575    0.049  -11.847    0.000
    b05_17_ (lmb4)   -0.253    0.059   -4.265    0.000
    b05_22_ (lmb5)   -0.635    0.049  -12.979    0.000
    b05_27_ (lmb6)    0.593    0.046   12.857    0.000
    b05_32_ (lmb7)    0.467    0.035   13.511    0.000
    b05_37_ (lmb8)   -0.733    0.048  -15.243    0.000
    b05_42_ (lmb9)   -0.312    0.048   -6.548    0.000
    b05_47_ (lm10)   -0.736    0.049  -14.932    0.000
    b05_52_ (lm11)    0.478    0.031   15.343    0.000
    b05_57_ (lm12)    0.580    0.048   12.197    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_1 (i1)    4.132    0.035  117.713    0.000
   .bf05_07_1         4.412    0.029  150.971    0.000
   .bf05_12_1         2.935    0.046   63.427    0.000
   .bf05_17_1         2.845    0.054   52.892    0.000
   .bf05_22_1         2.302    0.047   49.028    0.000
   .bf05_27_1         3.647    0.044   82.286    0.000
   .bf05_32_1         3.951    0.034  117.879    0.000
   .bf05_37_1         2.592    0.047   54.777    0.000
   .bf05_42_1         3.604    0.043   83.442    0.000
   .bf05_47_1         2.500    0.049   51.498    0.000
   .bf05_52_1         4.222    0.031  137.343    0.000
   .bf05_57_1         3.112    0.045   68.733    0.000
    agre_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_02_t1        0.559    0.035   16.173    0.000
   .bf05_07_t1        0.387    0.024   16.224    0.000
   .bf05_12_t1        1.176    0.067   17.474    0.000
   .bf05_17_t1        1.973    0.106   18.620    0.000
   .bf05_22_t1        1.147    0.067   17.071    0.000
   .bf05_27_t1        1.030    0.060   17.182    0.000
   .bf05_32_t1        0.572    0.034   17.041    0.000
   .bf05_37_t1        1.039    0.064   16.324    0.000
   .bf05_42_t1        1.216    0.066   18.366    0.000
   .bf05_47_t1        1.118    0.067   16.592    0.000
   .bf05_52_t1        0.436    0.027   16.320    0.000
   .bf05_57_t1        1.107    0.064   17.324    0.000
    agree_curr1       1.000                           
tidy(fit_cfa_agree_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_curr1 =~ bf05_47_t1 =~    lambda10   -0.736    0.0493  -0.571
 2 agree_curr1 =~ bf05_37_t1 =~    lambda8    -0.733    0.0481  -0.584
 3 agree_curr1 =~ bf05_22_t1 =~    lambda5    -0.635    0.0489  -0.510
 4 agree_curr1 =~ bf05_27_t1 =~    lambda6     0.593    0.0461   0.504
 5 agree_curr1 =~ bf05_57_t1 =~    lambda12    0.580    0.0475   0.483
 6 agree_curr1 =~ bf05_12_t1 =~    lambda3    -0.575    0.0486  -0.469
 7 agree_curr1 =~ bf05_02_t1 =~    lambda1     0.556    0.0355   0.597
 8 agree_curr1 =~ bf05_52_t1 =~    lambda11    0.478    0.0312   0.586
 9 agree_curr1 =~ bf05_32_t1 =~    lambda7     0.467    0.0346   0.525
10 agree_curr1 =~ bf05_07_t1 =~    lambda2     0.462    0.0295   0.596
11 agree_curr1 =~ bf05_42_t1 =~    lambda9    -0.312    0.0476  -0.272
12 agree_curr1 =~ bf05_17_t1 =~    lambda4    -0.253    0.0592  -0.177

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_47_t1_r = bf05_47_t1,
         bf05_37_t1_r = bf05_37_t1,
         bf05_22_t1_r = bf05_22_t1,
         bf05_12_t1_r = bf05_12_t1,
         bf05_42_t1_r = bf05_42_t1,
         bf05_17_t1_r = bf05_17_t1,
         bf05_47_t2_r = bf05_47_t2,
         bf05_37_t2_r = bf05_37_t2,
         bf05_22_t2_r = bf05_22_t2,
         bf05_12_t2_r = bf05_12_t2,
         bf05_42_t2_r = bf05_42_t2,
         bf05_17_t2_r = bf05_17_t2) %>% 
  mutate(across(c(bf05_47_t1_r, bf05_37_t1_r, bf05_22_t1_r, bf05_12_t1_r, bf05_42_t1_r, bf05_17_t1_r, 
                  bf05_47_t2_r, bf05_37_t2_r, bf05_22_t2_r, bf05_12_t2_r, bf05_42_t2_r, bf05_17_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_curr_par1_t1 = rowMeans(across(c(bf05_47_t1_r, bf05_12_t1_r, bf05_32_t1, bf05_17_t1)), na.rm=T),
         agree_curr_par2_t1 = rowMeans(across(c(bf05_37_t1_r, bf05_57_t1, bf05_52_t1, bf05_42_t1)), na.rm=T),
         agree_curr_par3_t1 = rowMeans(across(c(bf05_22_t1_r, bf05_27_t1, bf05_02_t1, bf05_07_t1)), na.rm=T),
         agree_curr_par1_t2 = rowMeans(across(c(bf05_47_t2_r, bf05_12_t2_r, bf05_32_t2, bf05_17_t2)), na.rm=T),
         agree_curr_par2_t2 = rowMeans(across(c(bf05_37_t2_r, bf05_57_t2, bf05_52_t2, bf05_42_t2)), na.rm=T),
         agree_curr_par3_t2 = rowMeans(across(c(bf05_22_t2_r, bf05_27_t2, bf05_02_t2, bf05_07_t2)), na.rm=T))

3.2.4 Agreeableness - ideal personality

Check CFA item loadings at T1

cfa_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*bf06_02_t1 + lambda1*bf06_02_t1 + lambda2*bf06_07_t1 + lambda3*bf06_12_t1 + lambda4*bf06_17_t1 + lambda5*bf06_22_t1 + lambda6*bf06_27_t1 + lambda7*bf06_32_t1 + lambda8*bf06_37_t1 + lambda9*bf06_42_t1 + lambda10*bf06_47_t1 + lambda11*bf06_52_t1 + lambda12*bf06_57_t1

# Intercepts
bf06_02_t1 ~ i1*1
bf06_07_t1 ~ 1
bf06_12_t1 ~ 1
bf06_17_t1 ~ 1
bf06_22_t1 ~ 1
bf06_27_t1 ~ 1
bf06_32_t1 ~ 1
bf06_37_t1 ~ 1
bf06_42_t1 ~ 1
bf06_47_t1 ~ 1
bf06_52_t1 ~ 1
bf06_57_t1 ~ 1

# Unique Variances
bf06_02_t1 ~~ bf06_02_t1
bf06_07_t1 ~~ bf06_07_t1
bf06_12_t1 ~~ bf06_12_t1
bf06_17_t1 ~~ bf06_17_t1
bf06_22_t1 ~~ bf06_22_t1
bf06_27_t1 ~~ bf06_27_t1
bf06_32_t1 ~~ bf06_32_t1
bf06_37_t1 ~~ bf06_37_t1
bf06_42_t1 ~~ bf06_42_t1
bf06_47_t1 ~~ bf06_47_t1
bf06_52_t1 ~~ bf06_52_t1
bf06_57_t1 ~~ bf06_57_t1

# Latent Variable Means
agree_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
'
fit_cfa_agree_ideal <- cfa(cfa_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_agree_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 38 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               207.020
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1676.172
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.905
  Tucker-Lewis Index (TLI)                       0.884
                                                      
  Robust Comparative Fit Index (CFI)             0.905
  Robust Tucker-Lewis Index (TLI)                0.884

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11321.510
  Loglikelihood unrestricted model (H1)     -11218.000
                                                      
  Akaike (AIC)                               22715.020
  Bayesian (BIC)                             22879.064
  Sample-size adjusted Bayesian (SABIC)      22764.757

Root Mean Square Error of Approximation:

  RMSEA                                          0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.073
  P-value H_0: RMSEA <= 0.050                    0.008
  P-value H_0: RMSEA >= 0.080                    0.001
                                                      
  Robust RMSEA                                   0.063
  90 Percent confidence interval - lower         0.054
  90 Percent confidence interval - upper         0.073
  P-value H_0: Robust RMSEA <= 0.050             0.008
  P-value H_0: Robust RMSEA >= 0.080             0.001

Standardized Root Mean Square Residual:

  SRMR                                           0.043

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  agree_ideal1 =~                                     
    b06_02_ (lmb1)    0.547    0.036   15.247    0.000
    b06_07_ (lmb2)    0.376    0.027   13.838    0.000
    b06_12_ (lmb3)   -0.418    0.039  -10.640    0.000
    b06_17_ (lmb4)   -0.155    0.064   -2.426    0.015
    b06_22_ (lmb5)   -0.404    0.044   -9.184    0.000
    b06_27_ (lmb6)    0.637    0.039   16.366    0.000
    b06_32_ (lmb7)    0.516    0.037   13.786    0.000
    b06_37_ (lmb8)   -0.532    0.035  -15.064    0.000
    b06_42_ (lmb9)   -0.417    0.047   -8.803    0.000
    b06_47_ (lm10)   -0.710    0.042  -17.026    0.000
    b06_52_ (lm11)    0.477    0.029   16.461    0.000
    b06_57_ (lm12)    0.601    0.039   15.498    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_1 (i1)    4.222    0.036  118.086    0.000
   .bf06_07_1         4.616    0.027  173.609    0.000
   .bf06_12_1         1.952    0.037   52.218    0.000
   .bf06_17_1         2.818    0.058   48.481    0.000
   .bf06_22_1         1.906    0.041   46.199    0.000
   .bf06_27_1         3.966    0.039  101.100    0.000
   .bf06_32_1         4.256    0.037  115.812    0.000
   .bf06_37_1         1.703    0.035   48.588    0.000
   .bf06_42_1         2.766    0.044   62.568    0.000
   .bf06_47_1         1.891    0.042   44.701    0.000
   .bf06_52_1         4.472    0.029  152.983    0.000
   .bf06_57_1         3.709    0.039   95.898    0.000
    agree_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_02_t1        0.601    0.036   16.725    0.000
   .bf06_07_t1        0.356    0.021   17.075    0.000
   .bf06_12_t1        0.809    0.045   17.873    0.000
   .bf06_17_t1        2.355    0.126   18.720    0.000
   .bf06_22_t1        1.036    0.057   18.105    0.000
   .bf06_27_t1        0.677    0.042   16.251    0.000
   .bf06_32_t1        0.683    0.040   17.155    0.000
   .bf06_37_t1        0.582    0.035   16.735    0.000
   .bf06_42_t1        1.202    0.066   18.140    0.000
   .bf06_47_t1        0.756    0.047   15.972    0.000
   .bf06_52_t1        0.374    0.023   16.214    0.000
   .bf06_57_t1        0.692    0.042   16.577    0.000
    agree_ideal1      1.000                           
tidy(fit_cfa_agree_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 agree_ideal1 =~ bf06_47_t1 =~    lambda10   -0.710    0.0417  -0.632
 2 agree_ideal1 =~ bf06_27_t1 =~    lambda6     0.637    0.0389   0.612
 3 agree_ideal1 =~ bf06_57_t1 =~    lambda12    0.601    0.0388   0.586
 4 agree_ideal1 =~ bf06_02_t1 =~    lambda1     0.547    0.0359   0.577
 5 agree_ideal1 =~ bf06_37_t1 =~    lambda8    -0.532    0.0353  -0.572
 6 agree_ideal1 =~ bf06_32_t1 =~    lambda7     0.516    0.0374   0.530
 7 agree_ideal1 =~ bf06_52_t1 =~    lambda11    0.477    0.0290   0.615
 8 agree_ideal1 =~ bf06_12_t1 =~    lambda3    -0.418    0.0393  -0.422
 9 agree_ideal1 =~ bf06_42_t1 =~    lambda9    -0.417    0.0474  -0.355
10 agree_ideal1 =~ bf06_22_t1 =~    lambda5    -0.404    0.0440  -0.369
11 agree_ideal1 =~ bf06_07_t1 =~    lambda2     0.376    0.0272   0.533
12 agree_ideal1 =~ bf06_17_t1 =~    lambda4    -0.155    0.0639  -0.101

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_47_t1_r = bf06_47_t1,
         bf06_37_t1_r = bf06_37_t1,
         bf06_22_t1_r = bf06_22_t1,
         bf06_12_t1_r = bf06_12_t1,
         bf06_42_t1_r = bf06_42_t1,
         bf06_17_t1_r = bf06_17_t1,
         bf06_47_t2_r = bf06_47_t2,
         bf06_37_t2_r = bf06_37_t2,
         bf06_22_t2_r = bf06_22_t2,
         bf06_12_t2_r = bf06_12_t2,
         bf06_42_t2_r = bf06_42_t2,
         bf06_17_t2_r = bf06_17_t2) %>% 
  mutate(across(c(bf06_47_t1_r, bf06_37_t1_r, bf06_22_t1_r, bf06_12_t1_r, bf06_42_t1_r, bf06_17_t1_r, 
                  bf06_47_t2_r, bf06_37_t2_r, bf06_22_t2_r, bf06_12_t2_r, bf06_42_t2_r, bf06_17_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(agree_ideal_par1_t1 = rowMeans(across(c(bf06_47_t1_r, bf06_32_t1, bf06_42_t1_r, bf06_17_t1_r)), na.rm=T),
         agree_ideal_par2_t1 = rowMeans(across(c(bf06_27_t1, bf06_37_t1_r, bf06_12_t1_r, bf06_07_t1)), na.rm=T),
         agree_ideal_par3_t1 = rowMeans(across(c(bf06_57_t1, bf06_02_t1, bf06_52_t1, bf06_22_t1_r)), na.rm=T),
         agree_ideal_par1_t2 = rowMeans(across(c(bf06_47_t2_r, bf06_32_t2, bf06_42_t2_r, bf06_17_t2_r)), na.rm=T),
         agree_ideal_par2_t2 = rowMeans(across(c(bf06_27_t2, bf06_37_t2_r, bf06_12_t2_r, bf06_07_t2)), na.rm=T),
         agree_ideal_par3_t2 = rowMeans(across(c(bf06_57_t2, bf06_02_t2, bf06_52_t2, bf06_22_t2_r)), na.rm=T))

3.2.5 Conscientiousness - current personality

Check CFA item loadings at T1

cfa_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*bf05_03_t1 + lambda1*bf05_03_t1 + lambda2*bf05_08_t1 + lambda3*bf05_13_t1 + lambda4*bf05_18_t1 + lambda5*bf05_23_t1 + lambda6*bf05_28_t1 + lambda7*bf05_33_t1 + lambda8*bf05_38_t1 + lambda9*bf05_43_t1 + lambda10*bf05_48_t1 + lambda11*bf05_53_t1 + lambda12*bf05_58_t1
# Intercepts
bf05_03_t1 ~ i1*1
bf05_08_t1 ~ 1
bf05_13_t1 ~ 1
bf05_18_t1 ~ 1
bf05_23_t1 ~ 1
bf05_28_t1 ~ 1
bf05_33_t1 ~ 1
bf05_38_t1 ~ 1
bf05_43_t1 ~ 1
bf05_48_t1 ~ 1
bf05_53_t1 ~ 1
bf05_58_t1 ~ 1

# Unique Variances
bf05_03_t1 ~~ bf05_03_t1
bf05_08_t1 ~~ bf05_08_t1
bf05_13_t1 ~~ bf05_13_t1
bf05_18_t1 ~~ bf05_18_t1
bf05_23_t1 ~~ bf05_23_t1
bf05_28_t1 ~~ bf05_28_t1
bf05_33_t1 ~~ bf05_33_t1
bf05_38_t1 ~~ bf05_38_t1
bf05_43_t1 ~~ bf05_43_t1
bf05_48_t1 ~~ bf05_48_t1
bf05_53_t1 ~~ bf05_53_t1
bf05_58_t1 ~~ bf05_58_t1

# Latent Variable Means
consc_curr1 ~ 0*1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
'
fit_cfa_consc_curr <- cfa(cfa_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 39 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         2            

Model Test User Model:
                                                      
  Test statistic                               514.063
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3020.731
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.844
  Tucker-Lewis Index (TLI)                       0.810
                                                      
  Robust Comparative Fit Index (CFI)             0.844
  Robust Tucker-Lewis Index (TLI)                0.810

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12199.493
  Loglikelihood unrestricted model (H1)     -11942.461
                                                      
  Akaike (AIC)                               24470.986
  Bayesian (BIC)                             24635.030
  Sample-size adjusted Bayesian (SABIC)      24520.722

Root Mean Square Error of Approximation:

  RMSEA                                          0.110
  90 Percent confidence interval - lower         0.101
  90 Percent confidence interval - upper         0.119
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.110
  90 Percent confidence interval - lower         0.101
  90 Percent confidence interval - upper         0.119
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.061

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_curr1 =~                                      
    b05_03_ (lmb1)    1.070    0.049   22.011    0.000
    b05_08_ (lmb2)    0.781    0.046   17.094    0.000
    b05_13_ (lmb3)   -0.443    0.041  -10.767    0.000
    b05_18_ (lmb4)   -0.855    0.042  -20.576    0.000
    b05_23_ (lmb5)    0.789    0.048   16.467    0.000
    b05_28_ (lmb6)    0.704    0.046   15.168    0.000
    b05_33_ (lmb7)   -0.872    0.042  -20.697    0.000
    b05_38_ (lmb8)   -0.654    0.036  -17.983    0.000
    b05_43_ (lmb9)   -0.463    0.035  -13.219    0.000
    b05_48_ (lm10)    0.766    0.044   17.481    0.000
    b05_53_ (lm11)   -0.672    0.041  -16.473    0.000
    b05_58_ (lm12)    0.622    0.048   12.969    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_1 (i1)    2.901    0.054   53.495    0.000
   .bf05_08_1         3.455    0.048   72.076    0.000
   .bf05_13_1         3.597    0.040   88.997    0.000
   .bf05_18_1         3.548    0.045   78.125    0.000
   .bf05_23_1         3.310    0.050   66.531    0.000
   .bf05_28_1         2.847    0.048   59.789    0.000
   .bf05_33_1         3.354    0.046   72.830    0.000
   .bf05_38_1         3.594    0.038   93.523    0.000
   .bf05_43_1         3.956    0.035  112.611    0.000
   .bf05_48_1         2.158    0.046   46.799    0.000
   .bf05_53_1         3.673    0.042   86.641    0.000
   .bf05_58_1         2.794    0.048   58.076    0.000
    cnsc_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_03_t1        0.923    0.059   15.538    0.000
   .bf05_08_t1        1.007    0.059   17.200    0.000
   .bf05_13_t1        0.954    0.052   18.226    0.000
   .bf05_18_t1        0.721    0.045   16.063    0.000
   .bf05_23_t1        1.120    0.065   17.261    0.000
   .bf05_28_t1        1.100    0.063   17.582    0.000
   .bf05_33_t1        0.732    0.046   15.905    0.000
   .bf05_38_t1        0.612    0.036   16.837    0.000
   .bf05_43_t1        0.655    0.037   17.876    0.000
   .bf05_48_t1        0.909    0.053   17.033    0.000
   .bf05_53_t1        0.813    0.047   17.252    0.000
   .bf05_58_t1        1.243    0.069   17.965    0.000
    consc_curr1       1.000                           
tidy(fit_cfa_consc_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_curr1 =~ bf05_03_t1 =~    lambda1     1.07     0.0486   0.744
 2 consc_curr1 =~ bf05_33_t1 =~    lambda7    -0.872    0.0421  -0.714
 3 consc_curr1 =~ bf05_18_t1 =~    lambda4    -0.855    0.0416  -0.710
 4 consc_curr1 =~ bf05_23_t1 =~    lambda5     0.789    0.0479   0.597
 5 consc_curr1 =~ bf05_08_t1 =~    lambda2     0.781    0.0457   0.614
 6 consc_curr1 =~ bf05_48_t1 =~    lambda10    0.766    0.0438   0.626
 7 consc_curr1 =~ bf05_28_t1 =~    lambda6     0.704    0.0464   0.557
 8 consc_curr1 =~ bf05_53_t1 =~    lambda11   -0.672    0.0408  -0.598
 9 consc_curr1 =~ bf05_38_t1 =~    lambda8    -0.654    0.0364  -0.642
10 consc_curr1 =~ bf05_58_t1 =~    lambda12    0.622    0.0479   0.487
11 consc_curr1 =~ bf05_43_t1 =~    lambda9    -0.463    0.0350  -0.497
12 consc_curr1 =~ bf05_13_t1 =~    lambda3    -0.443    0.0411  -0.413

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_03_t1_r = bf05_03_t1,
         bf05_23_t1_r = bf05_23_t1,
         bf05_48_t1_r = bf05_48_t1,
         bf05_08_t1_r = bf05_08_t1,
         bf05_28_t1_r = bf05_28_t1,
         bf05_58_t1_r = bf05_58_t1,
         bf05_03_t2_r = bf05_03_t2,
         bf05_23_t2_r = bf05_23_t2,
         bf05_48_t2_r = bf05_48_t2,
         bf05_08_t2_r = bf05_08_t2,
         bf05_28_t2_r = bf05_28_t2,
         bf05_58_t2_r = bf05_58_t2) %>% 
  mutate(across(c(bf05_03_t1_r, bf05_23_t1_r, bf05_48_t1_r, bf05_08_t1_r, bf05_28_t1_r, bf05_58_t1_r,
                  bf05_03_t2_r, bf05_23_t2_r, bf05_48_t2_r, bf05_08_t2_r, bf05_28_t2_r, bf05_58_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_curr_par1_t1 = rowMeans(across(c(bf05_03_t1_r, bf05_48_t1_r, bf05_38_t1, bf05_13_t1)), na.rm=T),
         consc_curr_par2_t1 = rowMeans(across(c(bf05_33_t1, bf05_08_t1_r, bf05_53_t1, bf05_43_t1)), na.rm=T),
         consc_curr_par3_t1 = rowMeans(across(c(bf05_18_t1, bf05_23_t1_r, bf05_28_t1_r, bf05_58_t1_r)), na.rm=T),
         consc_curr_par1_t2 = rowMeans(across(c(bf05_03_t2_r, bf05_48_t2_r, bf05_38_t2, bf05_13_t2)), na.rm=T),
         consc_curr_par2_t2 = rowMeans(across(c(bf05_33_t2, bf05_08_t2_r, bf05_53_t2, bf05_43_t2)), na.rm=T),
         consc_curr_par3_t2 = rowMeans(across(c(bf05_18_t2, bf05_23_t2_r, bf05_28_t2_r, bf05_58_t2_r)), na.rm=T))

3.2.6 Conscientiousness - ideal personality

Check CFA item loadings at T1

cfa_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*bf06_03_t1 + lambda1*bf06_03_t1 + lambda2*bf06_08_t1 + lambda3*bf06_13_t1 + lambda4*bf06_18_t1 + lambda5*bf06_23_t1 + lambda6*bf06_28_t1 + lambda7*bf06_33_t1 + lambda8*bf06_38_t1 + lambda9*bf06_43_t1 + lambda10*bf06_48_t1 + lambda11*bf06_53_t1 + lambda12*bf06_58_t1
# Intercepts
bf06_03_t1 ~ i1*1
bf06_08_t1 ~ 1
bf06_13_t1 ~ 1
bf06_18_t1 ~ 1
bf06_23_t1 ~ 1
bf06_28_t1 ~ 1
bf06_33_t1 ~ 1
bf06_38_t1 ~ 1
bf06_43_t1 ~ 1
bf06_48_t1 ~ 1
bf06_53_t1 ~ 1
bf06_58_t1 ~ 1

# Unique Variances
bf06_03_t1 ~~ bf06_03_t1
bf06_08_t1 ~~ bf06_08_t1
bf06_13_t1 ~~ bf06_13_t1
bf06_18_t1 ~~ bf06_18_t1
bf06_23_t1 ~~ bf06_23_t1
bf06_28_t1 ~~ bf06_28_t1
bf06_33_t1 ~~ bf06_33_t1
bf06_38_t1 ~~ bf06_38_t1
bf06_43_t1 ~~ bf06_43_t1
bf06_48_t1 ~~ bf06_48_t1
bf06_53_t1 ~~ bf06_53_t1
bf06_58_t1 ~~ bf06_58_t1

# Latent Variable Means
consc_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
'
fit_cfa_consc_ideal <- cfa(cfa_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_consc_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 21 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         1            

Model Test User Model:
                                                      
  Test statistic                               228.997
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1639.961
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.889
  Tucker-Lewis Index (TLI)                       0.864
                                                      
  Robust Comparative Fit Index (CFI)             0.889
  Robust Tucker-Lewis Index (TLI)                0.864

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10137.985
  Loglikelihood unrestricted model (H1)     -10023.487
                                                      
  Akaike (AIC)                               20347.971
  Bayesian (BIC)                             20512.015
  Sample-size adjusted Bayesian (SABIC)      20397.707

Root Mean Square Error of Approximation:

  RMSEA                                          0.068
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.077
  P-value H_0: RMSEA <= 0.050                    0.001
  P-value H_0: RMSEA >= 0.080                    0.014
                                                      
  Robust RMSEA                                   0.068
  90 Percent confidence interval - lower         0.059
  90 Percent confidence interval - upper         0.077
  P-value H_0: Robust RMSEA <= 0.050             0.001
  P-value H_0: Robust RMSEA >= 0.080             0.014

Standardized Root Mean Square Residual:

  SRMR                                           0.046

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  consc_ideal1 =~                                     
    b06_03_ (lmb1)    0.394    0.048    8.114    0.000
    b06_08_ (lmb2)    0.416    0.038   10.995    0.000
    b06_13_ (lmb3)   -0.385    0.042   -9.141    0.000
    b06_18_ (lmb4)   -0.383    0.032  -12.025    0.000
    b06_23_ (lmb5)    0.457    0.036   12.823    0.000
    b06_28_ (lmb6)    0.548    0.043   12.729    0.000
    b06_33_ (lmb7)   -0.470    0.030  -15.706    0.000
    b06_38_ (lmb8)   -0.415    0.028  -14.980    0.000
    b06_43_ (lmb9)   -0.397    0.026  -15.113    0.000
    b06_48_ (lm10)    0.438    0.029   14.955    0.000
    b06_53_ (lm11)   -0.452    0.027  -16.639    0.000
    b06_58_ (lm12)    0.456    0.037   12.430    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_1 (i1)    1.737    0.045   38.706    0.000
   .bf06_08_1         1.629    0.036   45.545    0.000
   .bf06_13_1         4.246    0.039  107.963    0.000
   .bf06_18_1         4.337    0.030  142.469    0.000
   .bf06_23_1         1.526    0.034   44.384    0.000
   .bf06_28_1         1.996    0.042   48.050    0.000
   .bf06_33_1         4.411    0.030  148.301    0.000
   .bf06_38_1         4.622    0.027  168.827    0.000
   .bf06_43_1         4.555    0.026  175.521    0.000
   .bf06_48_1         1.405    0.029   48.512    0.000
   .bf06_53_1         4.564    0.027  167.234    0.000
   .bf06_58_1         1.744    0.035   49.398    0.000
    consc_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_03_t1        1.263    0.069   18.213    0.000
   .bf06_08_t1        0.728    0.041   17.695    0.000
   .bf06_13_t1        0.941    0.052   18.074    0.000
   .bf06_18_t1        0.506    0.029   17.472    0.000
   .bf06_23_t1        0.623    0.036   17.289    0.000
   .bf06_28_t1        0.914    0.053   17.325    0.000
   .bf06_33_t1        0.402    0.025   16.327    0.000
   .bf06_38_t1        0.355    0.021   16.619    0.000
   .bf06_43_t1        0.317    0.019   16.556    0.000
   .bf06_48_t1        0.398    0.024   16.666    0.000
   .bf06_53_t1        0.320    0.020   15.912    0.000
   .bf06_58_t1        0.670    0.038   17.419    0.000
    consc_ideal1      1.000                           
tidy(fit_cfa_consc_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 consc_ideal1 =~ bf06_28_t1 =~    lambda6     0.548    0.0431   0.497
 2 consc_ideal1 =~ bf06_33_t1 =~    lambda7    -0.470    0.0299  -0.595
 3 consc_ideal1 =~ bf06_23_t1 =~    lambda5     0.457    0.0356   0.501
 4 consc_ideal1 =~ bf06_58_t1 =~    lambda12    0.456    0.0367   0.487
 5 consc_ideal1 =~ bf06_53_t1 =~    lambda11   -0.452    0.0272  -0.624
 6 consc_ideal1 =~ bf06_48_t1 =~    lambda10    0.438    0.0293   0.570
 7 consc_ideal1 =~ bf06_08_t1 =~    lambda2     0.416    0.0378   0.438
 8 consc_ideal1 =~ bf06_38_t1 =~    lambda8    -0.415    0.0277  -0.572
 9 consc_ideal1 =~ bf06_43_t1 =~    lambda9    -0.397    0.0263  -0.576
10 consc_ideal1 =~ bf06_03_t1 =~    lambda1     0.394    0.0485   0.330
11 consc_ideal1 =~ bf06_13_t1 =~    lambda3    -0.385    0.0421  -0.369
12 consc_ideal1 =~ bf06_18_t1 =~    lambda4    -0.383    0.0318  -0.474

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_03_t1_r = bf06_03_t1,
         bf06_23_t1_r = bf06_23_t1,
         bf06_48_t1_r = bf06_48_t1,
         bf06_08_t1_r = bf06_08_t1,
         bf06_28_t1_r = bf06_28_t1,
         bf06_58_t1_r = bf06_58_t1,
         bf06_03_t2_r = bf06_03_t2,
         bf06_23_t2_r = bf06_23_t2,
         bf06_48_t2_r = bf06_48_t2,
         bf06_08_t2_r = bf06_08_t2,
         bf06_28_t2_r = bf06_28_t2,
         bf06_58_t2_r = bf06_58_t2) %>% 
  mutate(across(c(bf06_03_t1_r, bf06_23_t1_r, bf06_48_t1_r, bf06_08_t1_r, bf06_28_t1_r, bf06_58_t1_r,
                  bf06_03_t2_r, bf06_23_t2_r, bf06_48_t2_r, bf06_08_t2_r, bf06_28_t2_r, bf06_58_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(consc_ideal_par1_t1 = rowMeans(across(c(bf06_28_t1_r, bf06_48_t1_r, bf06_43_t1, bf06_18_t1)), na.rm=T),
         consc_ideal_par2_t1 = rowMeans(across(c(bf06_33_t1, bf06_53_t1, bf06_38_t1, bf06_13_t1)), na.rm=T),
         consc_ideal_par3_t1 = rowMeans(across(c(bf06_23_t1_r, bf06_58_t1_r, bf06_08_t1_r, bf06_03_t1_r)), na.rm=T),
         consc_ideal_par1_t2 = rowMeans(across(c(bf06_28_t2_r, bf06_48_t2_r, bf06_43_t2, bf06_18_t2)), na.rm=T),
         consc_ideal_par2_t2 = rowMeans(across(c(bf06_33_t2, bf06_53_t2, bf06_38_t2, bf06_13_t2)), na.rm=T),
         consc_ideal_par3_t2 = rowMeans(across(c(bf06_23_t2_r, bf06_58_t2_r, bf06_08_t2_r, bf06_03_t2_r)), na.rm=T))

3.2.7 Neuroticism - current personality

Check CFA item loadings at T1

cfa_neuro_curr <- '
#| warning: false

# Define the latent factors
neuro_curr1 =~ NA*bf05_04_t1 + lambda1*bf05_04_t1 + lambda2*bf05_09_t1 + lambda3*bf05_14_t1 + lambda4*bf05_19_t1 + lambda5*bf05_24_t1 + lambda6*bf05_29_t1 + lambda7*bf05_34_t1 + lambda8*bf05_39_t1 + lambda9*bf05_44_t1 + lambda10*bf05_49_t1 + lambda11*bf05_54_t1 + lambda12*bf05_59_t1

# Intercepts
bf05_04_t1 ~ i1*1
bf05_09_t1 ~ 1
bf05_14_t1 ~ 1
bf05_19_t1 ~ 1
bf05_24_t1 ~ 1
bf05_29_t1 ~ 1
bf05_34_t1 ~ 1
bf05_39_t1 ~ 1
bf05_44_t1 ~ 1
bf05_49_t1 ~ 1
bf05_54_t1 ~ 1
bf05_59_t1 ~ 1

# Unique Variances
bf05_04_t1 ~~ bf05_04_t1
bf05_09_t1 ~~ bf05_09_t1
bf05_14_t1 ~~ bf05_14_t1
bf05_19_t1 ~~ bf05_19_t1
bf05_24_t1 ~~ bf05_24_t1
bf05_29_t1 ~~ bf05_29_t1
bf05_34_t1 ~~ bf05_34_t1
bf05_39_t1 ~~ bf05_39_t1
bf05_44_t1 ~~ bf05_44_t1
bf05_49_t1 ~~ bf05_49_t1
bf05_54_t1 ~~ bf05_54_t1
bf05_59_t1 ~~ bf05_59_t1

# Latent Variable Means
neuro_curr1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
'
fit_cfa_neuro_curr <- cfa(cfa_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
Warning in lav_data_full(data = data, group = group, cluster = cluster, : lavaan WARNING: some cases are empty and will be ignored:
  16 41 91 317 381 382 414 444 505 606 705
summary(fit_cfa_neuro_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 34 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         4            

Model Test User Model:
                                                      
  Test statistic                               654.794
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              3599.996
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.830
  Tucker-Lewis Index (TLI)                       0.792
                                                      
  Robust Comparative Fit Index (CFI)             0.830
  Robust Tucker-Lewis Index (TLI)                0.792

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12392.351
  Loglikelihood unrestricted model (H1)     -12064.954
                                                      
  Akaike (AIC)                               24856.701
  Bayesian (BIC)                             25020.745
  Sample-size adjusted Bayesian (SABIC)      24906.437

Root Mean Square Error of Approximation:

  RMSEA                                          0.126
  90 Percent confidence interval - lower         0.117
  90 Percent confidence interval - upper         0.134
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.126
  90 Percent confidence interval - lower         0.117
  90 Percent confidence interval - upper         0.134
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.060

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_curr1 =~                                      
    b05_04_ (lmb1)    0.889    0.044   20.156    0.000
    b05_09_ (lmb2)    0.720    0.045   15.945    0.000
    b05_14_ (lmb3)   -0.831    0.047  -17.825    0.000
    b05_19_ (lmb4)   -0.598    0.040  -14.906    0.000
    b05_24_ (lmb5)    0.803    0.045   17.928    0.000
    b05_29_ (lmb6)    0.903    0.042   21.305    0.000
    b05_34_ (lmb7)   -0.810    0.041  -19.588    0.000
    b05_39_ (lmb8)   -0.923    0.044  -20.954    0.000
    b05_44_ (lmb9)    0.776    0.043   18.009    0.000
    b05_49_ (lm10)    0.599    0.046   12.942    0.000
    b05_54_ (lm11)   -0.949    0.045  -21.283    0.000
    b05_59_ (lm12)   -0.759    0.048  -15.789    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_1 (i1)    2.754    0.048   57.017    0.000
   .bf05_09_1         2.926    0.047   62.162    0.000
   .bf05_14_1         3.257    0.050   65.636    0.000
   .bf05_19_1         3.639    0.041   87.961    0.000
   .bf05_24_1         2.942    0.048   61.537    0.000
   .bf05_29_1         2.908    0.047   61.917    0.000
   .bf05_34_1         3.861    0.045   85.935    0.000
   .bf05_39_1         3.383    0.048   70.033    0.000
   .bf05_44_1         3.161    0.046   69.232    0.000
   .bf05_49_1         2.366    0.047   50.510    0.000
   .bf05_54_1         3.331    0.049   67.698    0.000
   .bf05_59_1         3.151    0.050   63.190    0.000
    neur_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_04_t1        0.852    0.051   16.673    0.000
   .bf05_09_t1        1.041    0.059   17.648    0.000
   .bf05_14_t1        1.042    0.060   17.251    0.000
   .bf05_19_t1        0.848    0.048   17.841    0.000
   .bf05_24_t1        0.963    0.056   17.288    0.000
   .bf05_29_t1        0.737    0.046   16.091    0.000
   .bf05_34_t1        0.766    0.046   16.816    0.000
   .bf05_39_t1        0.791    0.050   15.897    0.000
   .bf05_44_t1        0.865    0.051   16.946    0.000
   .bf05_49_t1        1.184    0.065   18.086    0.000
   .bf05_54_t1        0.804    0.051   15.845    0.000
   .bf05_59_t1        1.174    0.067   17.579    0.000
    neuro_curr1       1.000                           
tidy(fit_cfa_neuro_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_curr1 =~ bf05_54_t1 =~    lambda11   -0.949    0.0446  -0.727
 2 neuro_curr1 =~ bf05_39_t1 =~    lambda8    -0.923    0.0440  -0.720
 3 neuro_curr1 =~ bf05_29_t1 =~    lambda6     0.903    0.0424   0.725
 4 neuro_curr1 =~ bf05_04_t1 =~    lambda1     0.889    0.0441   0.694
 5 neuro_curr1 =~ bf05_14_t1 =~    lambda3    -0.831    0.0466  -0.631
 6 neuro_curr1 =~ bf05_34_t1 =~    lambda7    -0.810    0.0413  -0.679
 7 neuro_curr1 =~ bf05_24_t1 =~    lambda5     0.803    0.0448   0.633
 8 neuro_curr1 =~ bf05_44_t1 =~    lambda9     0.776    0.0431   0.641
 9 neuro_curr1 =~ bf05_59_t1 =~    lambda12   -0.759    0.0481  -0.574
10 neuro_curr1 =~ bf05_09_t1 =~    lambda2     0.720    0.0451   0.577
11 neuro_curr1 =~ bf05_49_t1 =~    lambda10    0.599    0.0463   0.483
12 neuro_curr1 =~ bf05_19_t1 =~    lambda4    -0.598    0.0401  -0.545

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_29_t1_r = bf05_29_t1,
         bf05_04_t1_r = bf05_04_t1,
         bf05_24_t1_r = bf05_24_t1,
         bf05_44_t1_r = bf05_44_t1,
         bf05_09_t1_r = bf05_09_t1,
         bf05_49_t1_r = bf05_49_t1,
         bf05_29_t2_r = bf05_29_t2,
         bf05_04_t2_r = bf05_04_t2,
         bf05_24_t2_r = bf05_24_t2,
         bf05_44_t2_r = bf05_44_t2,
         bf05_09_t2_r = bf05_09_t2,
         bf05_49_t2_r = bf05_49_t2) %>% 
  mutate(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_44_t1_r, bf05_09_t1_r, bf05_49_t1_r, 
                  bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_44_t2_r, bf05_09_t2_r, bf05_49_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_curr_par1_t1 = rowMeans(across(c(bf05_54_t1, bf05_34_t1, bf05_59_t1, bf05_19_t1)), na.rm=T),
         neuro_curr_par2_t1 = rowMeans(across(c(bf05_39_t1, bf05_14_t1, bf05_44_t1_r, bf05_49_t1_r)), na.rm=T),
         neuro_curr_par3_t1 = rowMeans(across(c(bf05_29_t1_r, bf05_04_t1_r, bf05_24_t1_r, bf05_09_t1_r)), na.rm=T),
         neuro_curr_par1_t2 = rowMeans(across(c(bf05_54_t2, bf05_34_t2, bf05_59_t2, bf05_19_t2)), na.rm=T),
         neuro_curr_par2_t2 = rowMeans(across(c(bf05_39_t2, bf05_14_t2, bf05_44_t2_r, bf05_49_t2_r)), na.rm=T),
         neuro_curr_par3_t2 = rowMeans(across(c(bf05_29_t2_r, bf05_04_t2_r, bf05_24_t2_r, bf05_09_t2_r)), na.rm=T))

3.2.8 Neuroticism - ideal personality

Check CFA item loadings at T1

cfa_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*bf06_04_t1 + lambda1*bf06_04_t1 + lambda2*bf06_09_t1 + lambda3*bf06_14_t1 + lambda4*bf06_19_t1 + lambda5*bf06_24_t1 + lambda6*bf06_29_t1 + lambda7*bf06_34_t1 + lambda8*bf06_39_t1 + lambda9*bf06_44_t1 + lambda10*bf06_49_t1 + lambda11*bf06_54_t1 + lambda12*bf06_59_t1

# Intercepts
bf06_04_t1 ~ i1*1
bf06_09_t1 ~ 1
bf06_14_t1 ~ 1
bf06_19_t1 ~ 1
bf06_24_t1 ~ 1
bf06_29_t1 ~ 1
bf06_34_t1 ~ 1
bf06_39_t1 ~ 1
bf06_44_t1 ~ 1
bf06_49_t1 ~ 1
bf06_54_t1 ~ 1
bf06_59_t1 ~ 1

# Unique Variances
bf06_04_t1 ~~ bf06_04_t1
bf06_09_t1 ~~ bf06_09_t1
bf06_14_t1 ~~ bf06_14_t1
bf06_19_t1 ~~ bf06_19_t1
bf06_24_t1 ~~ bf06_24_t1
bf06_29_t1 ~~ bf06_29_t1
bf06_34_t1 ~~ bf06_34_t1
bf06_39_t1 ~~ bf06_39_t1
bf06_44_t1 ~~ bf06_44_t1
bf06_49_t1 ~~ bf06_49_t1
bf06_54_t1 ~~ bf06_54_t1
bf06_59_t1 ~~ bf06_59_t1

# Latent Variable Means
neuro_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
'
fit_cfa_neuro_ideal <- cfa(cfa_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_neuro_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 38 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               168.864
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1410.123
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.915
  Tucker-Lewis Index (TLI)                       0.896
                                                      
  Robust Comparative Fit Index (CFI)             0.915
  Robust Tucker-Lewis Index (TLI)                0.896

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -10550.799
  Loglikelihood unrestricted model (H1)     -10466.367
                                                      
  Akaike (AIC)                               21173.599
  Bayesian (BIC)                             21337.643
  Sample-size adjusted Bayesian (SABIC)      21223.335

Root Mean Square Error of Approximation:

  RMSEA                                          0.055
  90 Percent confidence interval - lower         0.046
  90 Percent confidence interval - upper         0.064
  P-value H_0: RMSEA <= 0.050                    0.182
  P-value H_0: RMSEA >= 0.080                    0.000
                                                      
  Robust RMSEA                                   0.055
  90 Percent confidence interval - lower         0.046
  90 Percent confidence interval - upper         0.064
  P-value H_0: Robust RMSEA <= 0.050             0.182
  P-value H_0: Robust RMSEA >= 0.080             0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.042

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  neuro_ideal1 =~                                     
    b06_04_ (lmb1)    0.331    0.029   11.280    0.000
    b06_09_ (lmb2)    0.348    0.033   10.653    0.000
    b06_14_ (lmb3)   -0.477    0.036  -13.201    0.000
    b06_19_ (lmb4)   -0.491    0.040  -12.203    0.000
    b06_24_ (lmb5)    0.314    0.028   11.016    0.000
    b06_29_ (lmb6)    0.355    0.043    8.242    0.000
    b06_34_ (lmb7)   -0.540    0.037  -14.464    0.000
    b06_39_ (lmb8)   -0.557    0.032  -17.368    0.000
    b06_44_ (lmb9)    0.401    0.032   12.421    0.000
    b06_49_ (lm10)    0.340    0.062    5.478    0.000
    b06_54_ (lm11)   -0.517    0.030  -17.380    0.000
    b06_59_ (lm12)   -0.432    0.037  -11.566    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_1 (i1)    4.554    0.028  164.475    0.000
   .bf06_09_1         4.378    0.031  143.156    0.000
   .bf06_14_1         1.719    0.035   49.385    0.000
   .bf06_19_1         2.111    0.038   55.024    0.000
   .bf06_24_1         4.639    0.027  173.498    0.000
   .bf06_29_1         4.215    0.040  106.203    0.000
   .bf06_34_1         1.868    0.036   51.236    0.000
   .bf06_39_1         1.657    0.032   51.363    0.000
   .bf06_44_1         4.376    0.031  141.928    0.000
   .bf06_49_1         3.544    0.056   62.996    0.000
   .bf06_54_1         1.501    0.030   50.163    0.000
   .bf06_59_1         1.967    0.035   55.612    0.000
    neuro_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_04_t1        0.430    0.025   17.523    0.000
   .bf06_09_t1        0.537    0.030   17.658    0.000
   .bf06_14_t1        0.625    0.037   17.054    0.000
   .bf06_19_t1        0.795    0.046   17.321    0.000
   .bf06_24_t1        0.405    0.023   17.566    0.000
   .bf06_29_t1        0.981    0.054   18.131    0.000
   .bf06_34_t1        0.644    0.039   16.636    0.000
   .bf06_39_t1        0.421    0.028   15.220    0.000
   .bf06_44_t1        0.508    0.029   17.257    0.000
   .bf06_49_t1        2.113    0.114   18.505    0.000
   .bf06_54_t1        0.363    0.024   15.250    0.000
   .bf06_59_t1        0.694    0.040   17.483    0.000
    neuro_ideal1      1.000                           
tidy(fit_cfa_neuro_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label    estimate std.error std.all
   <chr>                      <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 neuro_ideal1 =~ bf06_39_t1 =~    lambda8    -0.557    0.0321  -0.652
 2 neuro_ideal1 =~ bf06_34_t1 =~    lambda7    -0.540    0.0374  -0.559
 3 neuro_ideal1 =~ bf06_54_t1 =~    lambda11   -0.517    0.0298  -0.651
 4 neuro_ideal1 =~ bf06_19_t1 =~    lambda4    -0.491    0.0403  -0.483
 5 neuro_ideal1 =~ bf06_14_t1 =~    lambda3    -0.477    0.0361  -0.517
 6 neuro_ideal1 =~ bf06_59_t1 =~    lambda12   -0.432    0.0374  -0.460
 7 neuro_ideal1 =~ bf06_44_t1 =~    lambda9     0.401    0.0323   0.491
 8 neuro_ideal1 =~ bf06_29_t1 =~    lambda6     0.355    0.0431   0.338
 9 neuro_ideal1 =~ bf06_09_t1 =~    lambda2     0.348    0.0327   0.429
10 neuro_ideal1 =~ bf06_49_t1 =~    lambda10    0.340    0.0621   0.228
11 neuro_ideal1 =~ bf06_04_t1 =~    lambda1     0.331    0.0294   0.451
12 neuro_ideal1 =~ bf06_24_t1 =~    lambda5     0.314    0.0285   0.442

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_29_t1_r = bf06_29_t1,
         bf06_04_t1_r = bf06_04_t1,
         bf06_24_t1_r = bf06_24_t1,
         bf06_44_t1_r = bf06_44_t1,
         bf06_09_t1_r = bf06_09_t1,
         bf06_49_t1_r = bf06_49_t1,
         bf06_29_t2_r = bf06_29_t2,
         bf06_04_t2_r = bf06_04_t2,
         bf06_24_t2_r = bf06_24_t2,
         bf06_44_t2_r = bf06_44_t2,
         bf06_09_t2_r = bf06_09_t2,
         bf06_49_t2_r = bf06_49_t2) %>% 
  mutate(across(c(bf06_29_t1_r, bf06_04_t1_r, bf06_24_t1_r, bf06_44_t1_r, bf06_09_t1_r, bf06_49_t1_r, 
                  bf06_29_t2_r, bf06_04_t2_r, bf06_24_t2_r, bf06_44_t2_r, bf06_09_t2_r, bf06_49_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(neuro_ideal_par1_t1 = rowMeans(across(c(bf06_39_t1, bf06_59_t1, bf06_09_t1_r, bf06_24_t1_r)), na.rm=T),
         neuro_ideal_par2_t1 = rowMeans(across(c(bf06_34_t1, bf06_14_t1, bf06_29_t1_r, bf06_04_t1_r)), na.rm=T),
         neuro_ideal_par3_t1 = rowMeans(across(c(bf06_54_t1, bf06_19_t1, bf06_44_t1_r, bf06_49_t1_r)), na.rm=T),
         neuro_ideal_par1_t2 = rowMeans(across(c(bf06_39_t2, bf06_59_t2, bf06_09_t2_r, bf06_24_t2_r)), na.rm=T),
         neuro_ideal_par2_t2 = rowMeans(across(c(bf06_34_t2, bf06_14_t2, bf06_29_t2_r, bf06_04_t2_r)), na.rm=T),
         neuro_ideal_par3_t2 = rowMeans(across(c(bf06_54_t2, bf06_19_t2, bf06_44_t2_r, bf06_49_t2_r)), na.rm=T))

3.2.9 Openness - current personality

Check CFA item loadings at T1

cfa_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*bf05_05_t1 + lambda1*bf05_05_t1 + lambda2*bf05_10_t1 + lambda3*bf05_15_t1 + lambda4*bf05_20_t1 + lambda5*bf05_25_t1 + lambda6*bf05_30_t1 + lambda7*bf05_35_t1 + lambda8*bf05_40_t1 + lambda9*bf05_45_t1 + lambda10*bf05_50_t1 + lambda11*bf05_55_t1 + lambda12*bf05_60_t1

# Intercepts
bf05_05_t1 ~ i1*1
bf05_10_t1 ~ 1
bf05_15_t1 ~ 1
bf05_20_t1 ~ 1
bf05_25_t1 ~ 1
bf05_30_t1 ~ 1
bf05_35_t1 ~ 1
bf05_40_t1 ~ 1
bf05_45_t1 ~ 1
bf05_50_t1 ~ 1
bf05_55_t1 ~ 1
bf05_60_t1 ~ 1

# Unique Variances
bf05_05_t1 ~~ bf05_05_t1
bf05_10_t1 ~~ bf05_10_t1
bf05_15_t1 ~~ bf05_15_t1
bf05_20_t1 ~~ bf05_20_t1
bf05_25_t1 ~~ bf05_25_t1
bf05_30_t1 ~~ bf05_30_t1
bf05_35_t1 ~~ bf05_35_t1
bf05_40_t1 ~~ bf05_40_t1
bf05_45_t1 ~~ bf05_45_t1
bf05_50_t1 ~~ bf05_50_t1
bf05_55_t1 ~~ bf05_55_t1
bf05_60_t1 ~~ bf05_60_t1

# Latent Variable Means
openn_curr1 ~ 0*1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
'
fit_cfa_openn_curr <- cfa(cfa_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_curr, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 42 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         5            

Model Test User Model:
                                                      
  Test statistic                               724.925
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1968.166
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.647
  Tucker-Lewis Index (TLI)                       0.569
                                                      
  Robust Comparative Fit Index (CFI)             0.647
  Robust Tucker-Lewis Index (TLI)                0.569

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -12474.714
  Loglikelihood unrestricted model (H1)     -12112.251
                                                      
  Akaike (AIC)                               25021.427
  Bayesian (BIC)                             25185.471
  Sample-size adjusted Bayesian (SABIC)      25071.164

Root Mean Square Error of Approximation:

  RMSEA                                          0.133
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.142
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    1.000
                                                      
  Robust RMSEA                                   0.133
  90 Percent confidence interval - lower         0.124
  90 Percent confidence interval - upper         0.142
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.083

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_curr1 =~                                      
    b05_05_ (lmb1)    0.052    0.055    0.948    0.343
    b05_10_ (lmb2)   -0.532    0.040  -13.357    0.000
    b05_15_ (lmb3)   -0.466    0.044  -10.486    0.000
    b05_20_ (lmb4)   -0.754    0.050  -15.212    0.000
    b05_25_ (lmb5)    0.511    0.053    9.667    0.000
    b05_30_ (lmb6)    0.537    0.052   10.368    0.000
    b05_35_ (lmb7)   -0.700    0.044  -16.029    0.000
    b05_40_ (lmb8)   -0.389    0.040   -9.626    0.000
    b05_45_ (lmb9)    0.528    0.047   11.165    0.000
    b05_50_ (lm10)    0.673    0.055   12.224    0.000
    b05_55_ (lm11)    0.593    0.046   12.769    0.000
    b05_60_ (lm12)   -0.560    0.044  -12.592    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_1 (i1)    3.024    0.049   61.271    0.000
   .bf05_10_1         4.064    0.037  109.383    0.000
   .bf05_15_1         3.588    0.038   94.497    0.000
   .bf05_20_1         3.817    0.044   86.571    0.000
   .bf05_25_1         2.420    0.048   49.998    0.000
   .bf05_30_1         2.635    0.048   55.349    0.000
   .bf05_35_1         3.888    0.040   98.118    0.000
   .bf05_40_1         3.911    0.037  105.467    0.000
   .bf05_45_1         2.075    0.044   47.261    0.000
   .bf05_50_1         2.543    0.050   50.534    0.000
   .bf05_55_1         2.543    0.044   57.452    0.000
   .bf05_60_1         3.526    0.040   88.896    0.000
    opnn_crr1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf05_05_t1        1.708    0.091   18.728    0.000
   .bf05_10_t1        0.689    0.042   16.217    0.000
   .bf05_15_t1        0.798    0.049   16.286    0.000
   .bf05_20_t1        0.800    0.062   12.821    0.000
   .bf05_25_t1        1.389    0.078   17.726    0.000
   .bf05_30_t1        1.304    0.074   17.513    0.000
   .bf05_35_t1        0.615    0.049   12.502    0.000
   .bf05_40_t1        0.816    0.046   17.744    0.000
   .bf05_45_t1        1.076    0.062   17.311    0.000
   .bf05_50_t1        1.330    0.081   16.493    0.000
   .bf05_55_t1        1.027    0.060   17.041    0.000
   .bf05_60_t1        0.794    0.051   15.646    0.000
    openn_curr1       1.000                           
tidy(fit_cfa_openn_curr) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                      op    label    estimate std.error std.all
   <chr>                     <chr> <chr>       <dbl>     <dbl>   <dbl>
 1 openn_curr1 =~ bf05_20_t1 =~    lambda4   -0.754     0.0495 -0.644 
 2 openn_curr1 =~ bf05_35_t1 =~    lambda7   -0.700     0.0437 -0.666 
 3 openn_curr1 =~ bf05_50_t1 =~    lambda10   0.673     0.0550  0.504 
 4 openn_curr1 =~ bf05_55_t1 =~    lambda11   0.593     0.0465  0.505 
 5 openn_curr1 =~ bf05_60_t1 =~    lambda12  -0.560     0.0445 -0.532 
 6 openn_curr1 =~ bf05_30_t1 =~    lambda6    0.537     0.0518  0.425 
 7 openn_curr1 =~ bf05_10_t1 =~    lambda2   -0.532     0.0398 -0.539 
 8 openn_curr1 =~ bf05_45_t1 =~    lambda9    0.528     0.0473  0.454 
 9 openn_curr1 =~ bf05_25_t1 =~    lambda5    0.511     0.0528  0.398 
10 openn_curr1 =~ bf05_15_t1 =~    lambda3   -0.466     0.0444 -0.462 
11 openn_curr1 =~ bf05_40_t1 =~    lambda8   -0.389     0.0404 -0.396 
12 openn_curr1 =~ bf05_05_t1 =~    lambda1    0.0522    0.0551  0.0399

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf05_50_t1_r = bf05_50_t1,
         bf05_55_t1_r = bf05_55_t1,
         bf05_30_t1_r = bf05_30_t1,
         bf05_25_t1_r = bf05_25_t1,
         bf05_45_t1_r = bf05_45_t1,
         bf05_05_t1_r = bf05_05_t1,
         bf05_50_t2_r = bf05_50_t2,
         bf05_55_t2_r = bf05_55_t2,
         bf05_30_t2_r = bf05_30_t2,
         bf05_25_t2_r = bf05_25_t2,
         bf05_45_t2_r = bf05_45_t2,
         bf05_05_t2_r = bf05_05_t2) %>% 
  mutate(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_30_t1_r, bf05_25_t1_r, bf05_45_t1_r, bf05_05_t1_r,
                  bf05_50_t2_r, bf05_55_t2_r, bf05_30_t2_r, bf05_25_t2_r, bf05_45_t2_r, bf05_05_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_curr_par1_t1 = rowMeans(across(c(bf05_20_t1, bf05_30_t1_r, bf05_25_t1_r, bf05_05_t1_r)), na.rm=T),
         openn_curr_par2_t1 = rowMeans(across(c(bf05_35_t1, bf05_60_t1, bf05_45_t1_r, bf05_40_t1)), na.rm=T),
         openn_curr_par3_t1 = rowMeans(across(c(bf05_50_t1_r, bf05_55_t1_r, bf05_10_t1, bf05_15_t1)), na.rm=T),
         openn_curr_par1_t2 = rowMeans(across(c(bf05_20_t2, bf05_30_t2_r, bf05_25_t2_r, bf05_05_t2_r)), na.rm=T),
         openn_curr_par2_t2 = rowMeans(across(c(bf05_35_t2, bf05_60_t2, bf05_45_t2_r, bf05_40_t2)), na.rm=T),
         openn_curr_par3_t2 = rowMeans(across(c(bf05_50_t2_r, bf05_55_t2_r, bf05_10_t2, bf05_15_t2)), na.rm=T))

3.2.10 Openness - ideal personality

Check CFA item loadings at T1

cfa_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*bf06_05_t1 + lambda1*bf06_05_t1 + lambda2*bf06_10_t1 + lambda3*bf06_15_t1 + lambda4*bf06_20_t1 + lambda5*bf06_25_t1 + lambda6*bf06_30_t1 + lambda7*bf06_35_t1 + lambda8*bf06_40_t1 + lambda9*bf06_45_t1 + lambda10*bf06_50_t1 + lambda11*bf06_55_t1 + lambda12*bf06_60_t1

# Intercepts
bf06_05_t1 ~ i1*1
bf06_10_t1 ~ 1
bf06_15_t1 ~ 1
bf06_20_t1 ~ 1
bf06_25_t1 ~ 1
bf06_30_t1 ~ 1
bf06_35_t1 ~ 1
bf06_40_t1 ~ 1
bf06_45_t1 ~ 1
bf06_50_t1 ~ 1
bf06_55_t1 ~ 1
bf06_60_t1 ~ 1

# Unique Variances
bf06_05_t1 ~~ bf06_05_t1
bf06_10_t1 ~~ bf06_10_t1
bf06_15_t1 ~~ bf06_15_t1
bf06_20_t1 ~~ bf06_20_t1
bf06_25_t1 ~~ bf06_25_t1
bf06_30_t1 ~~ bf06_30_t1
bf06_35_t1 ~~ bf06_35_t1
bf06_40_t1 ~~ bf06_40_t1
bf06_45_t1 ~~ bf06_45_t1
bf06_50_t1 ~~ bf06_50_t1
bf06_55_t1 ~~ bf06_55_t1
bf06_60_t1 ~~ bf06_60_t1

# Latent Variable Means
openn_ideal1 ~ 0*1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
'
fit_cfa_openn_ideal <- cfa(cfa_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_cfa_openn_ideal, fit.measures = TRUE)
lavaan 0.6.15 ended normally after 48 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        36

                                                  Used       Total
  Number of observations                           704         715
  Number of missing patterns                         3            

Model Test User Model:
                                                      
  Test statistic                               365.801
  Degrees of freedom                                54
  P-value (Chi-square)                           0.000

Model Test Baseline Model:

  Test statistic                              1468.753
  Degrees of freedom                                66
  P-value                                        0.000

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.778
  Tucker-Lewis Index (TLI)                       0.728
                                                      
  Robust Comparative Fit Index (CFI)             0.777
  Robust Tucker-Lewis Index (TLI)                0.728

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)             -11578.781
  Loglikelihood unrestricted model (H1)     -11395.881
                                                      
  Akaike (AIC)                               23229.562
  Bayesian (BIC)                             23393.606
  Sample-size adjusted Bayesian (SABIC)      23279.299

Root Mean Square Error of Approximation:

  RMSEA                                          0.091
  90 Percent confidence interval - lower         0.082
  90 Percent confidence interval - upper         0.099
  P-value H_0: RMSEA <= 0.050                    0.000
  P-value H_0: RMSEA >= 0.080                    0.977
                                                      
  Robust RMSEA                                   0.091
  90 Percent confidence interval - lower         0.082
  90 Percent confidence interval - upper         0.100
  P-value H_0: Robust RMSEA <= 0.050             0.000
  P-value H_0: Robust RMSEA >= 0.080             0.978

Standardized Root Mean Square Residual:

  SRMR                                           0.061

Parameter Estimates:

  Standard errors                             Standard
  Information                                 Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)
  openn_ideal1 =~                                     
    b06_05_ (lmb1)    0.000    0.063    0.007    0.994
    b06_10_ (lmb2)   -0.367    0.031  -11.834    0.000
    b06_15_ (lmb3)   -0.332    0.027  -12.436    0.000
    b06_20_ (lmb4)   -0.640    0.037  -17.212    0.000
    b06_25_ (lmb5)    0.505    0.046   10.924    0.000
    b06_30_ (lmb6)    0.501    0.058    8.603    0.000
    b06_35_ (lmb7)   -0.629    0.035  -18.181    0.000
    b06_40_ (lmb8)   -0.367    0.045   -8.209    0.000
    b06_45_ (lmb9)    0.384    0.043    8.974    0.000
    b06_50_ (lm10)    0.549    0.047   11.700    0.000
    b06_55_ (lm11)    0.436    0.051    8.485    0.000
    b06_60_ (lm12)   -0.394    0.030  -13.291    0.000

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_1 (i1)    3.205    0.056   57.477    0.000
   .bf06_10_1         4.452    0.029  153.591    0.000
   .bf06_15_1         4.588    0.025  186.317    0.000
   .bf06_20_1         4.284    0.036  118.738    0.000
   .bf06_25_1         1.908    0.043   44.545    0.000
   .bf06_30_1         2.027    0.053   38.141    0.000
   .bf06_35_1         4.266    0.034  125.636    0.000
   .bf06_40_1         3.923    0.041   96.111    0.000
   .bf06_45_1         1.667    0.039   42.796    0.000
   .bf06_50_1         2.105    0.044   47.826    0.000
   .bf06_55_1         2.232    0.047   47.600    0.000
   .bf06_60_1         4.524    0.028  162.198    0.000
    openn_dl1         0.000                           

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)
   .bf06_05_t1        2.186    0.117   18.748    0.000
   .bf06_10_t1        0.457    0.027   17.164    0.000
   .bf06_15_t1        0.317    0.019   16.579    0.000
   .bf06_20_t1        0.507    0.037   13.847    0.000
   .bf06_25_t1        1.036    0.060   17.393    0.000
   .bf06_30_t1        1.736    0.097   17.984    0.000
   .bf06_35_t1        0.416    0.032   13.100    0.000
   .bf06_40_t1        1.039    0.057   18.100    0.000
   .bf06_45_t1        0.920    0.051   17.859    0.000
   .bf06_50_t1        1.062    0.062   17.267    0.000
   .bf06_55_t1        1.358    0.075   18.030    0.000
   .bf06_60_t1        0.393    0.024   16.465    0.000
    openn_ideal1      1.000                           
tidy(fit_cfa_openn_ideal) %>% filter(str_detect(label, "lambda")) %>% mutate(abs_loading = abs(estimate)) %>% arrange(desc(abs_loading)) %>% select(1:5, std.all)
# A tibble: 12 × 6
   term                       op    label     estimate std.error   std.all
   <chr>                      <chr> <chr>        <dbl>     <dbl>     <dbl>
 1 openn_ideal1 =~ bf06_20_t1 =~    lambda4  -0.640       0.0372 -0.669   
 2 openn_ideal1 =~ bf06_35_t1 =~    lambda7  -0.629       0.0346 -0.698   
 3 openn_ideal1 =~ bf06_50_t1 =~    lambda10  0.549       0.0469  0.470   
 4 openn_ideal1 =~ bf06_25_t1 =~    lambda5   0.505       0.0463  0.445   
 5 openn_ideal1 =~ bf06_30_t1 =~    lambda6   0.501       0.0582  0.355   
 6 openn_ideal1 =~ bf06_55_t1 =~    lambda11  0.436       0.0513  0.350   
 7 openn_ideal1 =~ bf06_60_t1 =~    lambda12 -0.394       0.0296 -0.532   
 8 openn_ideal1 =~ bf06_45_t1 =~    lambda9   0.384       0.0428  0.371   
 9 openn_ideal1 =~ bf06_40_t1 =~    lambda8  -0.367       0.0447 -0.339   
10 openn_ideal1 =~ bf06_10_t1 =~    lambda2  -0.367       0.0310 -0.477   
11 openn_ideal1 =~ bf06_15_t1 =~    lambda3  -0.332       0.0267 -0.507   
12 openn_ideal1 =~ bf06_05_t1 =~    lambda1   0.000466    0.0628  0.000315

Reverse-code and form parcels (T1 and T2):

df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
  mutate(bf06_50_t1_r = bf06_50_t1,
         bf06_55_t1_r = bf06_55_t1,
         bf06_30_t1_r = bf06_30_t1,
         bf06_25_t1_r = bf06_25_t1,
         bf06_45_t1_r = bf06_45_t1,
         bf06_05_t1_r = bf06_05_t1,
         bf06_50_t2_r = bf06_50_t2,
         bf06_55_t2_r = bf06_55_t2,
         bf06_30_t2_r = bf06_30_t2,
         bf06_25_t2_r = bf06_25_t2,
         bf06_45_t2_r = bf06_45_t2,
         bf06_05_t2_r = bf06_05_t2) %>% 
  mutate(across(c(bf06_50_t1_r, bf06_55_t1_r, bf06_30_t1_r, bf06_25_t1_r, bf06_45_t1_r, bf06_05_t1_r,
                  bf06_50_t2_r, bf06_55_t2_r, bf06_30_t2_r, bf06_25_t2_r, bf06_45_t2_r, bf06_05_t2_r), 
                ~ recode(.x, `1` = 5L, `2` = 4L, `3` = 3L, `4` = 2L, `5` = 1L, .default = NA_integer_))) %>% 
  mutate(openn_ideal_par1_t1 = rowMeans(across(c(bf06_20_t1, bf06_55_t1_r, bf06_40_t1, bf06_05_t1)), na.rm=T),
         openn_ideal_par2_t1 = rowMeans(across(c(bf06_35_t1, bf06_30_t1_r, bf06_45_t1_r, bf06_15_t1)), na.rm=T),
         openn_ideal_par3_t1 = rowMeans(across(c(bf06_50_t1_r, bf06_25_t1_r, bf06_60_t1, bf06_10_t1)), na.rm=T),
         openn_ideal_par1_t2 = rowMeans(across(c(bf06_20_t2, bf06_55_t2_r, bf06_40_t2, bf06_05_t2)), na.rm=T),
         openn_ideal_par2_t2 = rowMeans(across(c(bf06_35_t2, bf06_30_t2_r, bf06_45_t2_r, bf06_15_t2)), na.rm=T),
         openn_ideal_par3_t2 = rowMeans(across(c(bf06_50_t2_r, bf06_25_t2_r, bf06_60_t2, bf06_10_t2)), na.rm=T))

# replace NaN with regular NA
df_sbsa_wide_pers <- df_sbsa_wide_pers %>% 
    mutate_all(~ifelse(is.nan(.), NA, .))

3.3 Recode all reverse-keyed items

This is only relevant for the facet-level models. All trait-level models rely on the parcels created above. However, the facet-level models pick the first item as the anchor indicator which is sometimes reverse-keyed for the latent factor. For analyses below I want to use just positively keyed variables (for neuroticism facets higher values should indicate higher neuroticism).

# save all relevant variable names
names_rev_scored <- df_sbsa_wide_pers %>% select(ends_with("_r")) %>% colnames()
names_rev_scored_orig <- gsub("_r", "", names_rev_scored) # variable names without the "_r" -> these are the original variables

# drop original variables
df_sbsa_wide_pers <- df_sbsa_wide_pers %>% select(-all_of(names_rev_scored_orig))
# recreate original variable names -> these are the recoded variables now!
df_sbsa_wide_pers <- df_sbsa_wide_pers %>% rename_with(~ gsub("_r", "", .x))

4 Measurement invariance

4.1 Well-being outcomes

Testing for measurement invariance of the latent traits across time.

4.1.1 Life satisfaction

Satisfaction with life scale (only the first four items - last one taps into a somewhat different construct)

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + sw06_02_t1 + sw06_03_t1 + sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + sw06_02_t2 + sw06_03_t2 + sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_configural_swls <- cfa(configural_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_swls, fit.measures = TRUE)

# Weak invariance model
weak_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ 1
sw06_03_t1 ~ 1
sw06_04_t1 ~ 1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ 1
sw06_03_t2 ~ 1
sw06_04_t2 ~ 1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_weak_swls <- cfa(weak_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_swls, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ sw06_01_t1
sw06_02_t1 ~~ sw06_02_t1
sw06_03_t1 ~~ sw06_03_t1
sw06_04_t1 ~~ sw06_04_t1

sw06_01_t2 ~~ sw06_01_t2
sw06_02_t2 ~~ sw06_02_t2
sw06_03_t2 ~~ sw06_03_t2
sw06_04_t2 ~~ sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_strong_swls <- cfa(strong_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_swls, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_swls <- '
# Define the latent factors
swls1 =~ NA*sw06_01_t1 + lambda1*sw06_01_t1 + lambda2*sw06_02_t1 + lambda3*sw06_03_t1 + lambda4*sw06_04_t1
swls2 =~ NA*sw06_01_t2 + lambda1*sw06_01_t2 + lambda2*sw06_02_t2 + lambda3*sw06_03_t2 + lambda4*sw06_04_t2

# Intercepts
sw06_01_t1 ~ i1*1
sw06_02_t1 ~ i2*1
sw06_03_t1 ~ i3*1
sw06_04_t1 ~ i4*1

sw06_01_t2 ~ i1*1
sw06_02_t2 ~ i2*1
sw06_03_t2 ~ i3*1
sw06_04_t2 ~ i4*1

# Unique Variances
sw06_01_t1 ~~ u1*sw06_01_t1
sw06_02_t1 ~~ u2*sw06_02_t1
sw06_03_t1 ~~ u3*sw06_03_t1
sw06_04_t1 ~~ u4*sw06_04_t1

sw06_01_t2 ~~ u1*sw06_01_t2
sw06_02_t2 ~~ u2*sw06_02_t2
sw06_03_t2 ~~ u3*sw06_03_t2
sw06_04_t2 ~~ u4*sw06_04_t2

# Latent Variable Means
swls1 ~ 0*1
swls2 ~ 1

# Latent Variable Variances and Covariance
swls1 ~~ 1*swls1
swls2 ~~ swls2
swls1 ~~ swls2
'
fit_strict_swls <- cfa(strict_swls, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_swls, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_swls) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    25  288. 14504. 14618. 0.912 0.870 0.141 0.0476
2 weak         714    22  289. 14499. 14599. 0.912 0.888 0.130 0.0484
3 strong       714    19  291. 14495. 14582. 0.913 0.902 0.122 0.0483
4 strict       714    15  303. 14498. 14567. 0.910 0.913 0.115 0.0511
# chi-square difference test for nested models 
anova(fit_configural_swls, fit_weak_swls)

Chi-Squared Difference Test

                    Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_configural_swls 19 14504 14618 288.29                                    
fit_weak_swls       22 14499 14599 289.34      1.046     0       3     0.7901
anova(fit_weak_swls, fit_strong_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_swls   22 14499 14599 289.34                                    
fit_strong_swls 25 14495 14582 291.26     1.9206     0       3     0.5891
anova(fit_strong_swls, fit_strict_swls)

Chi-Squared Difference Test

                Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)  
fit_strong_swls 25 14495 14582 291.26                                         
fit_strict_swls 29 14498 14567 302.77     11.516 0.051301       4    0.02133 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit relatively similar across model specifications. Chi^2 tests indicate that strong measurement invariance is given.

4.1.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + meaning_par2_t1 + meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + meaning_par2_t2 + meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_configural_meaning <- cfa(configural_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_meaning, fit.measures = TRUE)

# Weak invariance model
weak_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ 1
meaning_par3_t1 ~ 1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ 1
meaning_par3_t2 ~ 1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_weak_meaning <- cfa(weak_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_meaning, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ meaning_par1_t1
meaning_par2_t1 ~~ meaning_par2_t1
meaning_par3_t1 ~~ meaning_par3_t1

meaning_par1_t2 ~~ meaning_par1_t2
meaning_par2_t2 ~~ meaning_par2_t2
meaning_par3_t2 ~~ meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_strong_meaning <- cfa(strong_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_meaning, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_meaning <- '
# Define the latent factors
meaning1 =~ NA*meaning_par1_t1 + lambda1*meaning_par1_t1 + lambda2*meaning_par2_t1 + lambda3*meaning_par3_t1
meaning2 =~ NA*meaning_par1_t2 + lambda1*meaning_par1_t2 + lambda2*meaning_par2_t2 + lambda3*meaning_par3_t2

# Intercepts
meaning_par1_t1 ~ i1*1
meaning_par2_t1 ~ i2*1
meaning_par3_t1 ~ i3*1

meaning_par1_t2 ~ i1*1
meaning_par2_t2 ~ i2*1
meaning_par3_t2 ~ i3*1

# Unique Variances
meaning_par1_t1 ~~ u1*meaning_par1_t1
meaning_par2_t1 ~~ u2*meaning_par2_t1
meaning_par3_t1 ~~ u3*meaning_par3_t1

meaning_par1_t2 ~~ u1*meaning_par1_t2
meaning_par2_t2 ~~ u2*meaning_par2_t2
meaning_par3_t2 ~~ u3*meaning_par3_t2

# Latent Variable Means
meaning1 ~ 0*1
meaning2 ~ 1

# Latent Variable Variances and Covariance
meaning1 ~~ 1*meaning1
meaning2 ~~ meaning2
meaning1 ~~ meaning2
'
fit_strict_meaning <- cfa(strict_meaning, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_meaning, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_meaning) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq    AIC    BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    19  268. 10703. 10790. 0.911 0.834 0.213 0.0440
2 weak         714    17  268. 10700. 10777. 0.912 0.868 0.190 0.0442
3 strong       714    15  269. 10696. 10765. 0.912 0.891 0.173 0.0444
4 strict       714    12  276. 10698. 10752. 0.911 0.911 0.156 0.0488
# chi-square difference test for nested models 
anova(fit_configural_meaning, fit_weak_meaning)

Chi-Squared Difference Test

                       Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_meaning  8 10703 10790 268.30                         
fit_weak_meaning       10 10700 10777 268.47    0.17055     0       2
                       Pr(>Chisq)
fit_configural_meaning           
fit_weak_meaning           0.9183
anova(fit_weak_meaning, fit_strong_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_meaning   10 10700 10777 268.47                                    
fit_strong_meaning 12 10696 10765 268.98     0.5041     0       2     0.7772
anova(fit_strong_meaning, fit_strict_meaning)

Chi-Squared Difference Test

                   Df   AIC   BIC  Chisq Chisq diff    RMSEA Df diff Pr(>Chisq)
fit_strong_meaning 12 10696 10765 268.98                                       
fit_strict_meaning 15 10698 10752 276.46     7.4836 0.045751       3    0.05798
                    
fit_strong_meaning  
fit_strict_meaning .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + selfes_par2_t1 + selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + selfes_par2_t2 + selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_configural_selfes <- cfa(configural_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_selfes, fit.measures = TRUE)

# Weak invariance model
weak_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ 1
selfes_par3_t1 ~ 1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ 1
selfes_par3_t2 ~ 1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_weak_selfes <- cfa(weak_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_selfes, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ selfes_par1_t1
selfes_par2_t1 ~~ selfes_par2_t1
selfes_par3_t1 ~~ selfes_par3_t1

selfes_par1_t2 ~~ selfes_par1_t2
selfes_par2_t2 ~~ selfes_par2_t2
selfes_par3_t2 ~~ selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_strong_selfes <- cfa(strong_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_selfes, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_selfes <- '
# Define the latent factors
selfes1 =~ NA*selfes_par1_t1 + lambda1*selfes_par1_t1 + lambda2*selfes_par2_t1 + lambda3*selfes_par3_t1
selfes2 =~ NA*selfes_par1_t2 + lambda1*selfes_par1_t2 + lambda2*selfes_par2_t2 + lambda3*selfes_par3_t2

# Intercepts
selfes_par1_t1 ~ i1*1
selfes_par2_t1 ~ i2*1
selfes_par3_t1 ~ i3*1

selfes_par1_t2 ~ i1*1
selfes_par2_t2 ~ i2*1
selfes_par3_t2 ~ i3*1

# Unique Variances
selfes_par1_t1 ~~ u1*selfes_par1_t1
selfes_par2_t1 ~~ u2*selfes_par2_t1
selfes_par3_t1 ~~ u3*selfes_par3_t1

selfes_par1_t2 ~~ u1*selfes_par1_t2
selfes_par2_t2 ~~ u2*selfes_par2_t2
selfes_par3_t2 ~~ u3*selfes_par3_t2

# Latent Variable Means
selfes1 ~ 0*1
selfes2 ~ 1

# Latent Variable Variances and Covariance
selfes1 ~~ 1*selfes1
selfes2 ~~ selfes2
selfes1 ~~ selfes2
'
fit_strict_selfes <- cfa(strict_selfes, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_selfes, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_selfes) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    19  143. 7479. 7566. 0.964 0.932 0.154 0.0200
2 weak         714    17  143. 7476. 7554. 0.964 0.946 0.137 0.0226
3 strong       714    15  144. 7472. 7541. 0.965 0.956 0.124 0.0234
4 strict       714    12  146. 7469. 7523. 0.965 0.965 0.110 0.0215
# chi-square difference test for nested models 
anova(fit_configural_selfes, fit_weak_selfes)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_selfes  8 7479.4 7566.2 142.62                         
fit_weak_selfes       10 7476.2 7553.9 143.38    0.75476     0       2
                      Pr(>Chisq)
fit_configural_selfes           
fit_weak_selfes           0.6857
anova(fit_weak_selfes, fit_strong_selfes)

Chi-Squared Difference Test

                  Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_selfes   10 7476.2 7553.9 143.38                                    
fit_strong_selfes 12 7472.4 7541.0 143.66     0.2845     0       2     0.8674
anova(fit_strong_selfes, fit_strict_selfes)

Chi-Squared Difference Test

                  Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_strong_selfes 12 7472.4 7541.0 143.66                                    
fit_strict_selfes 15 7468.5 7523.4 145.76     2.1019     0       3     0.5515

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.1.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + concept_par2_t1 + concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + concept_par2_t2 + concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_configural_concept <- cfa(configural_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_configural_concept, fit.measures = TRUE)

# Weak invariance model
weak_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ 1
concept_par3_t1 ~ 1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ 1
concept_par3_t2 ~ 1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_weak_concept <- cfa(weak_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_weak_concept, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ concept_par1_t1
concept_par2_t1 ~~ concept_par2_t1
concept_par3_t1 ~~ concept_par3_t1

concept_par1_t2 ~~ concept_par1_t2
concept_par2_t2 ~~ concept_par2_t2
concept_par3_t2 ~~ concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_strong_concept <- cfa(strong_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strong_concept, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_concept <- '
# Define the latent factors
concept1 =~ NA*concept_par1_t1 + lambda1*concept_par1_t1 + lambda2*concept_par2_t1 + lambda3*concept_par3_t1
concept2 =~ NA*concept_par1_t2 + lambda1*concept_par1_t2 + lambda2*concept_par2_t2 + lambda3*concept_par3_t2

# Intercepts
concept_par1_t1 ~ i1*1
concept_par2_t1 ~ i2*1
concept_par3_t1 ~ i3*1

concept_par1_t2 ~ i1*1
concept_par2_t2 ~ i2*1
concept_par3_t2 ~ i3*1

# Unique Variances
concept_par1_t1 ~~ u1*concept_par1_t1
concept_par2_t1 ~~ u2*concept_par2_t1
concept_par3_t1 ~~ u3*concept_par3_t1

concept_par1_t2 ~~ u1*concept_par1_t2
concept_par2_t2 ~~ u2*concept_par2_t2
concept_par3_t2 ~~ u3*concept_par3_t2

# Latent Variable Means
concept1 ~ 0*1
concept2 ~ 1

# Latent Variable Variances and Covariance
concept1 ~~ 1*concept1
concept2 ~~ concept2
concept1 ~~ concept2
'
fit_strict_concept <- cfa(strict_concept, data = df_sbsa_wide_wb, mimic = "mplus", missing="ML")
summary(fit_strict_concept, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_concept) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   714    19  117. 8469. 8556. 0.959 0.923 0.138 0.0248
2 weak         714    17  121. 8469. 8547. 0.958 0.937 0.125 0.0339
3 strong       714    15  122. 8466. 8535. 0.959 0.948 0.113 0.0319
4 strict       714    12  125. 8463. 8518. 0.959 0.959 0.101 0.0357
# chi-square difference test for nested models 
anova(fit_configural_concept, fit_weak_concept)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_configural_concept  8 8469.5 8556.3 117.30                            
fit_weak_concept       10 8469.5 8547.2 121.31     4.0127 0.037543       2
                       Pr(>Chisq)
fit_configural_concept           
fit_weak_concept           0.1345
anova(fit_weak_concept, fit_strong_concept)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_weak_concept   10 8469.5 8547.2 121.31                                    
fit_strong_concept 12 8466.5 8535.0 122.31    0.99821     0       2     0.6071
anova(fit_strong_concept, fit_strict_concept)

Chi-Squared Difference Test

                   Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff Pr(>Chisq)
fit_strong_concept 12 8466.5 8535.0 122.31                                    
fit_strict_concept 15 8463.0 8517.9 124.87     2.5587     0       3     0.4648

Good model fit across all model specifications (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2 Big Five

Testing for measurement invariance of the latent BFI-2 traits across time.

4.2.1 Extraversion: current personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + extra_curr_par2_t1 + extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + extra_curr_par2_t2 + extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_configural_extra_curr <- cfa(configural_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_extra_curr, fit.measures = TRUE)

# Weak invariance model
weak_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ 1
extra_curr_par3_t1 ~ 1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ 1
extra_curr_par3_t2 ~ 1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_weak_extra_curr <- cfa(weak_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_extra_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ extra_curr_par1_t1
extra_curr_par2_t1 ~~ extra_curr_par2_t1
extra_curr_par3_t1 ~~ extra_curr_par3_t1

extra_curr_par1_t2 ~~ extra_curr_par1_t2
extra_curr_par2_t2 ~~ extra_curr_par2_t2
extra_curr_par3_t2 ~~ extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strong_extra_curr <- cfa(strong_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_extra_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_curr <- '
# Define the latent factors
extra_curr1 =~ NA*extra_curr_par1_t1 + lambda1*extra_curr_par1_t1 + lambda2*extra_curr_par2_t1 + lambda3*extra_curr_par3_t1
extra_curr2 =~ NA*extra_curr_par1_t2 + lambda1*extra_curr_par1_t2 + lambda2*extra_curr_par2_t2 + lambda3*extra_curr_par3_t2

# Intercepts
extra_curr_par1_t1 ~ i1*1
extra_curr_par2_t1 ~ i2*1
extra_curr_par3_t1 ~ i3*1

extra_curr_par1_t2 ~ i1*1
extra_curr_par2_t2 ~ i2*1
extra_curr_par3_t2 ~ i3*1

# Unique Variances
extra_curr_par1_t1 ~~ u1*extra_curr_par1_t1
extra_curr_par2_t1 ~~ u2*extra_curr_par2_t1
extra_curr_par3_t1 ~~ u3*extra_curr_par3_t1

extra_curr_par1_t2 ~~ u1*extra_curr_par1_t2
extra_curr_par2_t2 ~~ u2*extra_curr_par2_t2
extra_curr_par3_t2 ~~ u3*extra_curr_par3_t2

# Latent Variable Means
extra_curr1 ~ 0*1
extra_curr2 ~ 1

# Latent Variable Variances and Covariance
extra_curr1 ~~ 1*extra_curr1
extra_curr2 ~~ extra_curr2
extra_curr1 ~~ extra_curr2
'
fit_strict_extra_curr <- cfa(strict_extra_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_extra_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  357. 7780. 7867. 0.862 0.740 0.247 0.0524
2 weak         715    17  358. 7777. 7855. 0.862 0.793 0.221 0.0540
3 strong       715    15  359. 7774. 7842. 0.862 0.828 0.201 0.0552
4 strict       715    12  360. 7769. 7824. 0.863 0.863 0.179 0.0547
# chi-square difference test for nested models 
anova(fit_configural_extra_curr, fit_weak_extra_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_curr  8 7779.9 7866.8 356.95                         
fit_weak_extra_curr       10 7776.8 7854.5 357.80    0.84925     0       2
                          Pr(>Chisq)
fit_configural_extra_curr           
fit_weak_extra_curr            0.654
anova(fit_weak_extra_curr, fit_strong_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC Chisq Chisq diff RMSEA Df diff
fit_weak_extra_curr   10 7776.8 7854.5 357.8                         
fit_strong_extra_curr 12 7773.7 7842.3 358.7      0.893     0       2
                      Pr(>Chisq)
fit_weak_extra_curr             
fit_strong_extra_curr     0.6399
anova(fit_strong_extra_curr, fit_strict_extra_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_curr 12 7773.7 7842.3 358.69                         
fit_strict_extra_curr 15 7769.1 7823.9 360.07     1.3793     0       3
                      Pr(>Chisq)
fit_strong_extra_curr           
fit_strict_extra_curr     0.7104

Model fit still not satisfactory. Chi^2 tests indicate that strict measurement invariance is given.

4.2.2 Extraversion: ideal personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + extra_ideal_par2_t1 + extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + extra_ideal_par2_t2 + extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_configural_extra_ideal <- cfa(configural_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_extra_ideal, fit.measures = TRUE)

# Weak invariance model
weak_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ 1
extra_ideal_par3_t1 ~ 1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ 1
extra_ideal_par3_t2 ~ 1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_weak_extra_ideal <- cfa(weak_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_extra_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strong_extra_ideal <- cfa(strong_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_extra_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_extra_ideal <- '
# Define the latent factors
extra_ideal1 =~ NA*extra_ideal_par1_t1 + lambda1*extra_ideal_par1_t1 + lambda2*extra_ideal_par2_t1 + lambda3*extra_ideal_par3_t1
extra_ideal2 =~ NA*extra_ideal_par1_t2 + lambda1*extra_ideal_par1_t2 + lambda2*extra_ideal_par2_t2 + lambda3*extra_ideal_par3_t2

# Intercepts
extra_ideal_par1_t1 ~ i1*1
extra_ideal_par2_t1 ~ i2*1
extra_ideal_par3_t1 ~ i3*1

extra_ideal_par1_t2 ~ i1*1
extra_ideal_par2_t2 ~ i2*1
extra_ideal_par3_t2 ~ i3*1

# Unique Variances
extra_ideal_par1_t1 ~~ u1*extra_ideal_par1_t1
extra_ideal_par2_t1 ~~ u2*extra_ideal_par2_t1
extra_ideal_par3_t1 ~~ u3*extra_ideal_par3_t1

extra_ideal_par1_t2 ~~ u1*extra_ideal_par1_t2
extra_ideal_par2_t2 ~~ u2*extra_ideal_par2_t2
extra_ideal_par3_t2 ~~ u3*extra_ideal_par3_t2

# Latent Variable Means
extra_ideal1 ~ 0*1
extra_ideal2 ~ 1

# Latent Variable Variances and Covariance
extra_ideal1 ~~ 1*extra_ideal1
extra_ideal2 ~~ extra_ideal2
extra_ideal1 ~~ extra_ideal2
'
fit_strict_extra_ideal <- cfa(strict_extra_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_extra_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_extra_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  146. 6689. 6776. 0.884 0.782 0.156 0.0514
2 weak         715    17  147. 6685. 6763. 0.885 0.828 0.138 0.0514
3 strong       715    15  153. 6688. 6756. 0.882 0.852 0.128 0.0541
4 strict       715    12  156. 6684. 6739. 0.882 0.882 0.115 0.0734
# chi-square difference test for nested models 
anova(fit_configural_extra_ideal, fit_weak_extra_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_extra_ideal  8 6689.3 6776.2 146.47                         
fit_weak_extra_ideal       10 6685.4 6763.1 146.52   0.045527     0       2
                           Pr(>Chisq)
fit_configural_extra_ideal           
fit_weak_extra_ideal           0.9775
anova(fit_weak_extra_ideal, fit_strong_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_extra_ideal   10 6685.4 6763.1 146.52                            
fit_strong_extra_ideal 12 6687.8 6756.4 152.96     6.4435 0.055743       2
                       Pr(>Chisq)  
fit_weak_extra_ideal               
fit_strong_extra_ideal    0.03989 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_extra_ideal, fit_strict_extra_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_extra_ideal 12 6687.8 6756.4 152.96                         
fit_strict_extra_ideal 15 6684.5 6739.3 155.63     2.6654     0       3
                       Pr(>Chisq)
fit_strong_extra_ideal           
fit_strict_extra_ideal     0.4461

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.3 Agreeableness: current personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + agree_curr_par2_t1 + agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + agree_curr_par2_t2 + agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_configural_agree_curr <- cfa(configural_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_agree_curr, fit.measures = TRUE)

# Weak invariance model
weak_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ 1
agree_curr_par3_t1 ~ 1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ 1
agree_curr_par3_t2 ~ 1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_weak_agree_curr <- cfa(weak_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_agree_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ agree_curr_par1_t1
agree_curr_par2_t1 ~~ agree_curr_par2_t1
agree_curr_par3_t1 ~~ agree_curr_par3_t1

agree_curr_par1_t2 ~~ agree_curr_par1_t2
agree_curr_par2_t2 ~~ agree_curr_par2_t2
agree_curr_par3_t2 ~~ agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strong_agree_curr <- cfa(strong_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_agree_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_curr <- '
# Define the latent factors
agree_curr1 =~ NA*agree_curr_par1_t1 + lambda1*agree_curr_par1_t1 + lambda2*agree_curr_par2_t1 + lambda3*agree_curr_par3_t1
agree_curr2 =~ NA*agree_curr_par1_t2 + lambda1*agree_curr_par1_t2 + lambda2*agree_curr_par2_t2 + lambda3*agree_curr_par3_t2

# Intercepts
agree_curr_par1_t1 ~ i1*1
agree_curr_par2_t1 ~ i2*1
agree_curr_par3_t1 ~ i3*1

agree_curr_par1_t2 ~ i1*1
agree_curr_par2_t2 ~ i2*1
agree_curr_par3_t2 ~ i3*1

# Unique Variances
agree_curr_par1_t1 ~~ u1*agree_curr_par1_t1
agree_curr_par2_t1 ~~ u2*agree_curr_par2_t1
agree_curr_par3_t1 ~~ u3*agree_curr_par3_t1

agree_curr_par1_t2 ~~ u1*agree_curr_par1_t2
agree_curr_par2_t2 ~~ u2*agree_curr_par2_t2
agree_curr_par3_t2 ~~ u3*agree_curr_par3_t2

# Latent Variable Means
agree_curr1 ~ 0*1
agree_curr2 ~ 1

# Latent Variable Variances and Covariance
agree_curr1 ~~ 1*agree_curr1
agree_curr2 ~~ agree_curr2
agree_curr1 ~~ agree_curr2
'
fit_strict_agree_curr <- cfa(strict_agree_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_agree_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  202. 6509. 6596. 0.885 0.784 0.184 0.0541
2 weak         715    17  204. 6507. 6584. 0.885 0.828 0.165 0.0606
3 strong       715    15  205. 6504. 6572. 0.886 0.857 0.150 0.0590
4 strict       715    12  219. 6512. 6567. 0.879 0.879 0.138 0.0821
# chi-square difference test for nested models 
anova(fit_configural_agree_curr, fit_weak_agree_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_curr  8 6509.1 6595.9 202.19                         
fit_weak_agree_curr       10 6506.7 6584.4 203.84     1.6455     0       2
                          Pr(>Chisq)
fit_configural_agree_curr           
fit_weak_agree_curr           0.4392
anova(fit_weak_agree_curr, fit_strong_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_agree_curr   10 6506.7 6584.4 203.84                         
fit_strong_agree_curr 12 6503.9 6572.5 205.03     1.1924     0       2
                      Pr(>Chisq)
fit_weak_agree_curr             
fit_strong_agree_curr     0.5509
anova(fit_strong_agree_curr, fit_strict_agree_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_agree_curr 12 6503.9 6572.5 205.03                            
fit_strict_agree_curr 15 6511.6 6566.5 218.76     13.733 0.070738       3
                      Pr(>Chisq)   
fit_strong_agree_curr              
fit_strict_agree_curr   0.003292 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Model fit still not satisfactory. Chi^2 tests indicate that strong measurement invariance is given.

4.2.4 Agreeableness: ideal personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + agree_ideal_par2_t1 + agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + agree_ideal_par2_t2 + agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_configural_agree_ideal <- cfa(configural_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_agree_ideal, fit.measures = TRUE)

# Weak invariance model
weak_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ 1
agree_ideal_par3_t1 ~ 1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ 1
agree_ideal_par3_t2 ~ 1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_weak_agree_ideal <- cfa(weak_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_agree_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strong_agree_ideal <- cfa(strong_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_agree_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_agree_ideal <- '
# Define the latent factors
agree_ideal1 =~ NA*agree_ideal_par1_t1 + lambda1*agree_ideal_par1_t1 + lambda2*agree_ideal_par2_t1 + lambda3*agree_ideal_par3_t1
agree_ideal2 =~ NA*agree_ideal_par1_t2 + lambda1*agree_ideal_par1_t2 + lambda2*agree_ideal_par2_t2 + lambda3*agree_ideal_par3_t2

# Intercepts
agree_ideal_par1_t1 ~ i1*1
agree_ideal_par2_t1 ~ i2*1
agree_ideal_par3_t1 ~ i3*1

agree_ideal_par1_t2 ~ i1*1
agree_ideal_par2_t2 ~ i2*1
agree_ideal_par3_t2 ~ i3*1

# Unique Variances
agree_ideal_par1_t1 ~~ u1*agree_ideal_par1_t1
agree_ideal_par2_t1 ~~ u2*agree_ideal_par2_t1
agree_ideal_par3_t1 ~~ u3*agree_ideal_par3_t1

agree_ideal_par1_t2 ~~ u1*agree_ideal_par1_t2
agree_ideal_par2_t2 ~~ u2*agree_ideal_par2_t2
agree_ideal_par3_t2 ~~ u3*agree_ideal_par3_t2

# Latent Variable Means
agree_ideal1 ~ 0*1
agree_ideal2 ~ 1

# Latent Variable Variances and Covariance
agree_ideal1 ~~ 1*agree_ideal1
agree_ideal2 ~~ agree_ideal2
agree_ideal1 ~~ agree_ideal2
'
fit_strict_agree_ideal <- cfa(strict_agree_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_agree_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_agree_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  163. 6608. 6695. 0.914 0.838 0.165 0.0504
2 weak         715    17  164. 6604. 6682. 0.915 0.872 0.147 0.0511
3 strong       715    15  166. 6602. 6671. 0.915 0.893 0.134 0.0506
4 strict       715    12  168. 6599. 6653. 0.915 0.915 0.119 0.0548
# chi-square difference test for nested models 
anova(fit_configural_agree_ideal, fit_weak_agree_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_agree_ideal  8 6608.0 6694.8 163.41                         
fit_weak_agree_ideal       10 6604.1 6681.8 163.55    0.13458     0       2
                           Pr(>Chisq)
fit_configural_agree_ideal           
fit_weak_agree_ideal           0.9349
anova(fit_weak_agree_ideal, fit_strong_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_agree_ideal   10 6604.1 6681.8 163.55                            
fit_strong_agree_ideal 12 6602.3 6670.9 165.73     2.1834 0.011324       2
                       Pr(>Chisq)
fit_weak_agree_ideal             
fit_strong_agree_ideal     0.3356
anova(fit_strong_agree_ideal, fit_strict_agree_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_agree_ideal 12 6602.3 6670.9 165.73                         
fit_strict_agree_ideal 15 6598.5 6653.4 167.98     2.2504     0       3
                       Pr(>Chisq)
fit_strong_agree_ideal           
fit_strict_agree_ideal     0.5221

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.5 Conscientiousness: current personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + consc_curr_par2_t1 + consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + consc_curr_par2_t2 + consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_configural_consc_curr <- cfa(configural_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_consc_curr, fit.measures = TRUE)

# Weak invariance model
weak_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ 1
consc_curr_par3_t1 ~ 1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ 1
consc_curr_par3_t2 ~ 1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_weak_consc_curr <- cfa(weak_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_consc_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ consc_curr_par1_t1
consc_curr_par2_t1 ~~ consc_curr_par2_t1
consc_curr_par3_t1 ~~ consc_curr_par3_t1

consc_curr_par1_t2 ~~ consc_curr_par1_t2
consc_curr_par2_t2 ~~ consc_curr_par2_t2
consc_curr_par3_t2 ~~ consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strong_consc_curr <- cfa(strong_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_consc_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_curr <- '
# Define the latent factors
consc_curr1 =~ NA*consc_curr_par1_t1 + lambda1*consc_curr_par1_t1 + lambda2*consc_curr_par2_t1 + lambda3*consc_curr_par3_t1
consc_curr2 =~ NA*consc_curr_par1_t2 + lambda1*consc_curr_par1_t2 + lambda2*consc_curr_par2_t2 + lambda3*consc_curr_par3_t2

# Intercepts
consc_curr_par1_t1 ~ i1*1
consc_curr_par2_t1 ~ i2*1
consc_curr_par3_t1 ~ i3*1

consc_curr_par1_t2 ~ i1*1
consc_curr_par2_t2 ~ i2*1
consc_curr_par3_t2 ~ i3*1

# Unique Variances
consc_curr_par1_t1 ~~ u1*consc_curr_par1_t1
consc_curr_par2_t1 ~~ u2*consc_curr_par2_t1
consc_curr_par3_t1 ~~ u3*consc_curr_par3_t1

consc_curr_par1_t2 ~~ u1*consc_curr_par1_t2
consc_curr_par2_t2 ~~ u2*consc_curr_par2_t2
consc_curr_par3_t2 ~~ u3*consc_curr_par3_t2

# Latent Variable Means
consc_curr1 ~ 0*1
consc_curr2 ~ 1

# Latent Variable Variances and Covariance
consc_curr1 ~~ 1*consc_curr1
consc_curr2 ~~ consc_curr2
consc_curr1 ~~ consc_curr2
'
fit_strict_consc_curr <- cfa(strict_consc_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_consc_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  298. 7123. 7210. 0.916 0.843 0.225 0.0345
2 weak         715    17  299. 7121. 7198. 0.917 0.875 0.201 0.0371
3 strong       715    15  305. 7122. 7191. 0.916 0.894 0.185 0.0392
4 strict       715    12  315. 7126. 7181. 0.914 0.914 0.167 0.0446
# chi-square difference test for nested models 
anova(fit_configural_consc_curr, fit_weak_consc_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_curr  8 7123.3 7210.2 297.84                         
fit_weak_consc_curr       10 7120.6 7198.3 299.04     1.2051     0       2
                          Pr(>Chisq)
fit_configural_consc_curr           
fit_weak_consc_curr           0.5474
anova(fit_weak_consc_curr, fit_strong_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_weak_consc_curr   10 7120.6 7198.3 299.04                           
fit_strong_consc_curr 12 7122.2 7190.8 304.72     5.6787 0.05072       2
                      Pr(>Chisq)  
fit_weak_consc_curr               
fit_strong_consc_curr    0.05846 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(fit_strong_consc_curr, fit_strict_consc_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff   RMSEA Df diff
fit_strong_consc_curr 12 7122.2 7190.8 304.72                           
fit_strict_consc_curr 15 7126.0 7180.9 314.53     9.8061 0.05633       3
                      Pr(>Chisq)  
fit_strong_consc_curr             
fit_strict_consc_curr    0.02029 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.6 Conscientiousness: ideal personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + consc_ideal_par2_t1 + consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + consc_ideal_par2_t2 + consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_configural_consc_ideal <- cfa(configural_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_consc_ideal, fit.measures = TRUE)

# Weak invariance model
weak_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ 1
consc_ideal_par3_t1 ~ 1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ 1
consc_ideal_par3_t2 ~ 1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_weak_consc_ideal <- cfa(weak_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_consc_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strong_consc_ideal <- cfa(strong_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_consc_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_consc_ideal <- '
# Define the latent factors
consc_ideal1 =~ NA*consc_ideal_par1_t1 + lambda1*consc_ideal_par1_t1 + lambda2*consc_ideal_par2_t1 + lambda3*consc_ideal_par3_t1
consc_ideal2 =~ NA*consc_ideal_par1_t2 + lambda1*consc_ideal_par1_t2 + lambda2*consc_ideal_par2_t2 + lambda3*consc_ideal_par3_t2

# Intercepts
consc_ideal_par1_t1 ~ i1*1
consc_ideal_par2_t1 ~ i2*1
consc_ideal_par3_t1 ~ i3*1

consc_ideal_par1_t2 ~ i1*1
consc_ideal_par2_t2 ~ i2*1
consc_ideal_par3_t2 ~ i3*1

# Unique Variances
consc_ideal_par1_t1 ~~ u1*consc_ideal_par1_t1
consc_ideal_par2_t1 ~~ u2*consc_ideal_par2_t1
consc_ideal_par3_t1 ~~ u3*consc_ideal_par3_t1

consc_ideal_par1_t2 ~~ u1*consc_ideal_par1_t2
consc_ideal_par2_t2 ~~ u2*consc_ideal_par2_t2
consc_ideal_par3_t2 ~~ u3*consc_ideal_par3_t2

# Latent Variable Means
consc_ideal1 ~ 0*1
consc_ideal2 ~ 1

# Latent Variable Variances and Covariance
consc_ideal1 ~~ 1*consc_ideal1
consc_ideal2 ~~ consc_ideal2
consc_ideal1 ~~ consc_ideal2
'
fit_strict_consc_ideal <- cfa(strict_consc_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_consc_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_consc_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   715    19  64.9 5583. 5669. 0.965 0.934 0.0997 0.0256
2 weak         715    17  64.9 5579. 5656. 0.966 0.949 0.0876 0.0257
3 strong       715    15  65.2 5575. 5643. 0.967 0.959 0.0787 0.0259
4 strict       715    12  80.3 5584. 5639. 0.959 0.959 0.0780 0.0846
# chi-square difference test for nested models 
anova(fit_configural_consc_ideal, fit_weak_consc_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_consc_ideal  8 5582.6 5669.4 64.866                         
fit_weak_consc_ideal       10 5578.6 5656.3 64.878    0.01134     0       2
                           Pr(>Chisq)
fit_configural_consc_ideal           
fit_weak_consc_ideal           0.9943
anova(fit_weak_consc_ideal, fit_strong_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_consc_ideal   10 5578.6 5656.3 64.878                         
fit_strong_consc_ideal 12 5574.9 5643.5 65.187      0.309     0       2
                       Pr(>Chisq)
fit_weak_consc_ideal             
fit_strong_consc_ideal     0.8568
anova(fit_strong_consc_ideal, fit_strict_consc_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_consc_ideal 12 5574.9 5643.5 65.187                            
fit_strict_consc_ideal 15 5584.0 5638.9 80.313     15.126 0.075188       3
                       Pr(>Chisq)   
fit_strong_consc_ideal              
fit_strict_consc_ideal   0.001712 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.

4.2.7 Neuroticism: current personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + neuro_curr_par2_t1 + neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + neuro_curr_par2_t2 + neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_configural_neuro_curr <- cfa(configural_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_neuro_curr, fit.measures = TRUE)

# Weak invariance model
weak_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ 1
neuro_curr_par3_t1 ~ 1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ 1
neuro_curr_par3_t2 ~ 1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_weak_neuro_curr <- cfa(weak_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_neuro_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strong_neuro_curr <- cfa(strong_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_neuro_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_curr <- '
# Define the latent factors
neuro_curr1 =~ NA*neuro_curr_par1_t1 + lambda1*neuro_curr_par1_t1 + lambda2*neuro_curr_par2_t1 + lambda3*neuro_curr_par3_t1
neuro_curr2 =~ NA*neuro_curr_par1_t2 + lambda1*neuro_curr_par1_t2 + lambda2*neuro_curr_par2_t2 + lambda3*neuro_curr_par3_t2

# Intercepts
neuro_curr_par1_t1 ~ i1*1
neuro_curr_par2_t1 ~ i2*1
neuro_curr_par3_t1 ~ i3*1

neuro_curr_par1_t2 ~ i1*1
neuro_curr_par2_t2 ~ i2*1
neuro_curr_par3_t2 ~ i3*1

# Unique Variances
neuro_curr_par1_t1 ~~ u1*neuro_curr_par1_t1
neuro_curr_par2_t1 ~~ u2*neuro_curr_par2_t1
neuro_curr_par3_t1 ~~ u3*neuro_curr_par3_t1

neuro_curr_par1_t2 ~~ u1*neuro_curr_par1_t2
neuro_curr_par2_t2 ~~ u2*neuro_curr_par2_t2
neuro_curr_par3_t2 ~~ u3*neuro_curr_par3_t2

# Latent Variable Means
neuro_curr1 ~ 0*1
neuro_curr2 ~ 1

# Latent Variable Variances and Covariance
neuro_curr1 ~~ 1*neuro_curr1
neuro_curr2 ~~ neuro_curr2
neuro_curr1 ~~ neuro_curr2
'
fit_strict_neuro_curr <- cfa(strict_neuro_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_neuro_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  242. 7956. 8043. 0.929 0.867 0.202 0.0354
2 weak         715    17  244. 7953. 8031. 0.929 0.894 0.181 0.0380
3 strong       715    15  246. 7952. 8020. 0.929 0.912 0.165 0.0368
4 strict       715    12  247. 7947. 8001. 0.930 0.930 0.147 0.0381
# chi-square difference test for nested models 
anova(fit_configural_neuro_curr, fit_weak_neuro_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_curr  8 7955.8 8042.7 242.32                         
fit_weak_neuro_curr       10 7953.0 8030.8 243.54     1.2213     0       2
                          Pr(>Chisq)
fit_configural_neuro_curr           
fit_weak_neuro_curr            0.543
anova(fit_weak_neuro_curr, fit_strong_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_neuro_curr   10 7953.0 8030.8 243.54                            
fit_strong_neuro_curr 12 7951.9 8020.5 246.41     2.8662 0.024611       2
                      Pr(>Chisq)
fit_weak_neuro_curr             
fit_strong_neuro_curr     0.2386
anova(fit_strong_neuro_curr, fit_strict_neuro_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_curr 12 7951.9 8020.5 246.41                         
fit_strict_neuro_curr 15 7946.5 8001.4 247.04    0.63411     0       3
                      Pr(>Chisq)
fit_strong_neuro_curr           
fit_strict_neuro_curr     0.8886

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.8 Neuroticism: ideal personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + neuro_ideal_par2_t1 + neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + neuro_ideal_par2_t2 + neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_configural_neuro_ideal <- cfa(configural_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_neuro_ideal, fit.measures = TRUE)

# Weak invariance model
weak_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ 1
neuro_ideal_par3_t1 ~ 1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ 1
neuro_ideal_par3_t2 ~ 1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_weak_neuro_ideal <- cfa(weak_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_neuro_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strong_neuro_ideal <- cfa(strong_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_neuro_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_neuro_ideal <- '
# Define the latent factors
neuro_ideal1 =~ NA*neuro_ideal_par1_t1 + lambda1*neuro_ideal_par1_t1 + lambda2*neuro_ideal_par2_t1 + lambda3*neuro_ideal_par3_t1
neuro_ideal2 =~ NA*neuro_ideal_par1_t2 + lambda1*neuro_ideal_par1_t2 + lambda2*neuro_ideal_par2_t2 + lambda3*neuro_ideal_par3_t2

# Intercepts
neuro_ideal_par1_t1 ~ i1*1
neuro_ideal_par2_t1 ~ i2*1
neuro_ideal_par3_t1 ~ i3*1

neuro_ideal_par1_t2 ~ i1*1
neuro_ideal_par2_t2 ~ i2*1
neuro_ideal_par3_t2 ~ i3*1

# Unique Variances
neuro_ideal_par1_t1 ~~ u1*neuro_ideal_par1_t1
neuro_ideal_par2_t1 ~~ u2*neuro_ideal_par2_t1
neuro_ideal_par3_t1 ~~ u3*neuro_ideal_par3_t1

neuro_ideal_par1_t2 ~~ u1*neuro_ideal_par1_t2
neuro_ideal_par2_t2 ~~ u2*neuro_ideal_par2_t2
neuro_ideal_par3_t2 ~~ u3*neuro_ideal_par3_t2

# Latent Variable Means
neuro_ideal1 ~ 0*1
neuro_ideal2 ~ 1

# Latent Variable Variances and Covariance
neuro_ideal1 ~~ 1*neuro_ideal1
neuro_ideal2 ~~ neuro_ideal2
neuro_ideal1 ~~ neuro_ideal2
'
fit_strict_neuro_ideal <- cfa(strict_neuro_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_neuro_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_neuro_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   715    19  39.7 5816. 5903. 0.979 0.961 0.0745 0.0217
2 weak         715    17  41.2 5814. 5891. 0.979 0.969 0.0661 0.0261
3 strong       715    15  41.8 5810. 5879. 0.980 0.975 0.0589 0.0252
4 strict       715    12  43.9 5806. 5861. 0.981 0.981 0.0519 0.0358
# chi-square difference test for nested models 
anova(fit_configural_neuro_ideal, fit_weak_neuro_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_neuro_ideal  8 5816.1 5903.0 39.709                         
fit_weak_neuro_ideal       10 5813.6 5891.3 41.207     1.4977     0       2
                           Pr(>Chisq)
fit_configural_neuro_ideal           
fit_weak_neuro_ideal           0.4729
anova(fit_weak_neuro_ideal, fit_strong_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_weak_neuro_ideal   10 5813.6 5891.3 41.207                         
fit_strong_neuro_ideal 12 5810.2 5878.8 41.777    0.57064     0       2
                       Pr(>Chisq)
fit_weak_neuro_ideal             
fit_strong_neuro_ideal     0.7518
anova(fit_strong_neuro_ideal, fit_strict_neuro_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_strong_neuro_ideal 12 5810.2 5878.8 41.777                         
fit_strict_neuro_ideal 15 5806.3 5861.2 43.907     2.1301     0       3
                       Pr(>Chisq)
fit_strong_neuro_ideal           
fit_strict_neuro_ideal     0.5459

Good model fit across all stages of measurement invariance. Chi^2 tests indicate that strict measurement invariance is given.

4.2.9 Openness: current personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + openn_curr_par2_t1 + openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + openn_curr_par2_t2 + openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_configural_openn_curr <- cfa(configural_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_openn_curr, fit.measures = TRUE)

# Weak invariance model
weak_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ 1
openn_curr_par3_t1 ~ 1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ 1
openn_curr_par3_t2 ~ 1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_weak_openn_curr <- cfa(weak_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_openn_curr, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ openn_curr_par1_t1
openn_curr_par2_t1 ~~ openn_curr_par2_t1
openn_curr_par3_t1 ~~ openn_curr_par3_t1

openn_curr_par1_t2 ~~ openn_curr_par1_t2
openn_curr_par2_t2 ~~ openn_curr_par2_t2
openn_curr_par3_t2 ~~ openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strong_openn_curr <- cfa(strong_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_openn_curr, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_curr <- '
# Define the latent factors
openn_curr1 =~ NA*openn_curr_par1_t1 + lambda1*openn_curr_par1_t1 + lambda2*openn_curr_par2_t1 + lambda3*openn_curr_par3_t1
openn_curr2 =~ NA*openn_curr_par1_t2 + lambda1*openn_curr_par1_t2 + lambda2*openn_curr_par2_t2 + lambda3*openn_curr_par3_t2

# Intercepts
openn_curr_par1_t1 ~ i1*1
openn_curr_par2_t1 ~ i2*1
openn_curr_par3_t1 ~ i3*1

openn_curr_par1_t2 ~ i1*1
openn_curr_par2_t2 ~ i2*1
openn_curr_par3_t2 ~ i3*1

# Unique Variances
openn_curr_par1_t1 ~~ u1*openn_curr_par1_t1
openn_curr_par2_t1 ~~ u2*openn_curr_par2_t1
openn_curr_par3_t1 ~~ u3*openn_curr_par3_t1

openn_curr_par1_t2 ~~ u1*openn_curr_par1_t2
openn_curr_par2_t2 ~~ u2*openn_curr_par2_t2
openn_curr_par3_t2 ~~ u3*openn_curr_par3_t2

# Latent Variable Means
openn_curr1 ~ 0*1
openn_curr2 ~ 1

# Latent Variable Variances and Covariance
openn_curr1 ~~ 1*openn_curr1
openn_curr2 ~~ openn_curr2
openn_curr1 ~~ openn_curr2
'
fit_strict_openn_curr <- cfa(strict_openn_curr, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_openn_curr, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_curr) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
1 configural   715    19  223. 7148. 7235. 0.899 0.810 0.194 0.0499
2 weak         715    17  224. 7144. 7222. 0.899 0.849 0.173 0.0504
3 strong       715    15  227. 7143. 7212. 0.899 0.874 0.158 0.0499
4 strict       715    12  233. 7144. 7199. 0.897 0.897 0.143 0.0580
# chi-square difference test for nested models 
anova(fit_configural_openn_curr, fit_weak_openn_curr)

Chi-Squared Difference Test

                          Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_curr  8 7147.8 7234.7 223.42                         
fit_weak_openn_curr       10 7143.9 7221.7 223.55    0.12185     0       2
                          Pr(>Chisq)
fit_configural_openn_curr           
fit_weak_openn_curr           0.9409
anova(fit_weak_openn_curr, fit_strong_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_curr   10 7143.9 7221.7 223.55                            
fit_strong_openn_curr 12 7143.1 7211.7 226.74      3.191 0.028859       2
                      Pr(>Chisq)
fit_weak_openn_curr             
fit_strong_openn_curr     0.2028
anova(fit_strong_openn_curr, fit_strict_openn_curr)

Chi-Squared Difference Test

                      Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_curr 12 7143.1 7211.7 226.74                            
fit_strict_openn_curr 15 7143.8 7198.7 233.40       6.66 0.041307       3
                      Pr(>Chisq)  
fit_strong_openn_curr             
fit_strict_openn_curr    0.08356 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strict measurement invariance is given.

4.2.10 Openness: ideal personality

Fit model:

Show the code
# Code snippets adapted from https://quantdev.ssri.psu.edu/sites/qdev/files/LongitudinalMeasurementInvariance_2017_1108.html

# Configural invariance model
configural_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + openn_ideal_par2_t1 + openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + openn_ideal_par2_t2 + openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_configural_openn_ideal <- cfa(configural_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_configural_openn_ideal, fit.measures = TRUE)

# Weak invariance model
weak_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ 1
openn_ideal_par3_t1 ~ 1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ 1
openn_ideal_par3_t2 ~ 1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_weak_openn_ideal <- cfa(weak_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_weak_openn_ideal, fit.measures = TRUE)

# Strong invariance model (additional constraints on manifest intercepts)
strong_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strong_openn_ideal <- cfa(strong_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strong_openn_ideal, fit.measures = TRUE)

# Strict invariance model (additional constraints on manifest variances)
strict_openn_ideal <- '
# Define the latent factors
openn_ideal1 =~ NA*openn_ideal_par1_t1 + lambda1*openn_ideal_par1_t1 + lambda2*openn_ideal_par2_t1 + lambda3*openn_ideal_par3_t1
openn_ideal2 =~ NA*openn_ideal_par1_t2 + lambda1*openn_ideal_par1_t2 + lambda2*openn_ideal_par2_t2 + lambda3*openn_ideal_par3_t2

# Intercepts
openn_ideal_par1_t1 ~ i1*1
openn_ideal_par2_t1 ~ i2*1
openn_ideal_par3_t1 ~ i3*1

openn_ideal_par1_t2 ~ i1*1
openn_ideal_par2_t2 ~ i2*1
openn_ideal_par3_t2 ~ i3*1

# Unique Variances
openn_ideal_par1_t1 ~~ u1*openn_ideal_par1_t1
openn_ideal_par2_t1 ~~ u2*openn_ideal_par2_t1
openn_ideal_par3_t1 ~~ u3*openn_ideal_par3_t1

openn_ideal_par1_t2 ~~ u1*openn_ideal_par1_t2
openn_ideal_par2_t2 ~~ u2*openn_ideal_par2_t2
openn_ideal_par3_t2 ~~ u3*openn_ideal_par3_t2

# Latent Variable Means
openn_ideal1 ~ 0*1
openn_ideal2 ~ 1

# Latent Variable Variances and Covariance
openn_ideal1 ~~ 1*openn_ideal1
openn_ideal2 ~~ openn_ideal2
openn_ideal1 ~~ openn_ideal2
'
fit_strict_openn_ideal <- cfa(strict_openn_ideal, data = df_sbsa_wide_pers, mimic = "mplus", missing="ML")
summary(fit_strict_openn_ideal, fit.measures = TRUE)

Results summary:

# compare model fit
bind_rows(broom::glance(fit_configural_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_weak_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strong_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr),
          broom::glance(fit_strict_openn_ideal) %>% 
            select(nobs, npar, chisq, AIC, BIC, cfi, tli, rmsea, srmr)) %>% 
  mutate(model = c("configural", "weak", "strong", "strict")) %>% 
  select(model, everything())
# A tibble: 4 × 10
  model       nobs  npar chisq   AIC   BIC   cfi   tli  rmsea   srmr
  <chr>      <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
1 configural   715    19  91.6 6737. 6824. 0.938 0.885 0.121  0.0424
2 weak         715    17  91.9 6733. 6811. 0.940 0.909 0.107  0.0432
3 strong       715    15  95.2 6732. 6801. 0.939 0.923 0.0985 0.0464
4 strict       715    12 105.  6736. 6791. 0.934 0.934 0.0916 0.0803
# chi-square difference test for nested models 
anova(fit_configural_openn_ideal, fit_weak_openn_ideal)

Chi-Squared Difference Test

                           Df    AIC    BIC  Chisq Chisq diff RMSEA Df diff
fit_configural_openn_ideal  8 6736.8 6823.7 91.632                         
fit_weak_openn_ideal       10 6733.1 6810.8 91.936    0.30435     0       2
                           Pr(>Chisq)
fit_configural_openn_ideal           
fit_weak_openn_ideal           0.8588
anova(fit_weak_openn_ideal, fit_strong_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC    BIC  Chisq Chisq diff    RMSEA Df diff
fit_weak_openn_ideal   10 6733.1 6810.8 91.936                            
fit_strong_openn_ideal 12 6732.4 6801.0 95.230     3.2938 0.030079       2
                       Pr(>Chisq)
fit_weak_openn_ideal             
fit_strong_openn_ideal     0.1926
anova(fit_strong_openn_ideal, fit_strict_openn_ideal)

Chi-Squared Difference Test

                       Df    AIC  BIC  Chisq Chisq diff    RMSEA Df diff
fit_strong_openn_ideal 12 6732.4 6801  95.23                            
fit_strict_openn_ideal 15 6736.1 6791 104.98      9.745 0.056076       3
                       Pr(>Chisq)  
fit_strong_openn_ideal             
fit_strict_openn_ideal    0.02086 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Good model fit across all stages of measurement invariance (except for RMSEA). Chi^2 tests indicate that strong measurement invariance is given.


5 Descriptives

5.1 Sample size

How many participants at each time point and in each condition?

df_sbsa %>% summarise(n_distinct(pid)) # N (after exclusions)
# A tibble: 1 × 1
  `n_distinct(pid)`
              <int>
1               715
df_sbsa %>% group_by(time, rando) %>% tally()
# A tibble: 4 × 3
# Groups:   time [2]
   time rando                n
  <dbl> <chr>            <int>
1     1 Self-Acceptance    343
2     1 Self-Improvement   364
3     2 Self-Acceptance    326
4     2 Self-Improvement   338

707 at T1 because for 8 participants we only included valid data from T2.

5.2 Demographics

Gender and age distribution

# across all participants
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  mutate(gender_num = ifelse(gender=="Female", 1, 0)) %>% 
  summarise(n = n(), women = sum(gender_num), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 1 × 6
      n women m_age sd_age min_age max_age
  <int> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
1   715   358  30.7   9.44      19      69
# by group and time point
df_sbsa %>% group_by(time, rando) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 4 × 7
# Groups:   time [2]
   time rando                n m_age sd_age min_age max_age
  <dbl> <chr>            <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance    343  30.8   9.18      19      66
2     1 Self-Improvement   364  30.4   9.41      19      69
3     2 Self-Acceptance    326  30.9   9.42      19      66
4     2 Self-Improvement   338  30.6   9.63      19      69
df_sbsa %>% group_by(time, rando, gender) %>% 
  summarise(n = n(), m_age = mean(age, na.rm=T), sd_age = sd(age, na.rm=T), min_age = min(age, na.rm=T), max_age = max(age, na.rm=T))
# A tibble: 8 × 8
# Groups:   time, rando [4]
   time rando            gender     n m_age sd_age min_age max_age
  <dbl> <chr>            <chr>  <int> <dbl>  <dbl>   <dbl>   <dbl>
1     1 Self-Acceptance  Female   175  30.8   9.10      19      63
2     1 Self-Acceptance  Male     168  30.9   9.29      19      66
3     1 Self-Improvement Female   180  30.3   8.89      19      59
4     1 Self-Improvement Male     184  30.5   9.92      19      69
5     2 Self-Acceptance  Female   161  30.6   9.34      19      63
6     2 Self-Acceptance  Male     165  31.1   9.53      19      66
7     2 Self-Improvement Female   168  30.2   8.82      19      59
8     2 Self-Improvement Male     170  31.0  10.4       19      69

Other demographics (from Prolific info):

# across all participants: ethnicity
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(ethnicity) %>% summarise(n = n()) %>% ungroup() %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 6 × 3
  ethnicity     n   prop
  <chr>     <int>  <dbl>
1 Asian        15  2.10 
2 Black       193 27.0  
3 Mixed        34  4.76 
4 Other        12  1.68 
5 White       457 63.9  
6 <NA>          4  0.559
# across all participants: country of residence
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(country) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3)) %>% print(n=20)
# A tibble: 30 × 3
   country            n   prop
   <chr>          <int>  <dbl>
 1 South Africa     218 30.5  
 2 Poland           124 17.3  
 3 United Kingdom    63  8.81 
 4 Italy             59  8.25 
 5 Portugal          51  7.13 
 6 Greece            50  6.99 
 7 Spain             34  4.76 
 8 Hungary           27  3.78 
 9 Czech Republic    13  1.82 
10 Mexico             9  1.26 
11 Netherlands        9  1.26 
12 Estonia            7  0.979
13 Germany            5  0.699
14 Latvia             5  0.699
15 Australia          4  0.559
16 Belgium            4  0.559
17 France             4  0.559
18 Ireland            4  0.559
19 Slovenia           4  0.559
20 Sweden             4  0.559
# ℹ 10 more rows
# across all participants: student status
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(student) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 3 × 3
  student     n  prop
  <chr>   <int> <dbl>
1 No        373 52.2 
2 Yes       285 39.9 
3 <NA>       57  7.97
# across all participants: employment status
df_sbsa %>% group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  group_by(employed) %>% summarise(n = n()) %>% ungroup() %>% 
  arrange(desc(n)) %>% mutate(prop = round(n / sum(n) * 100, 3))
# A tibble: 7 × 3
  employed                                                     n  prop
  <chr>                                                    <int> <dbl>
1 Full-Time                                                  336 47.0 
2 Part-Time                                                  118 16.5 
3 Unemployed (and job seeking)                                88 12.3 
4 <NA>                                                        71  9.93
5 Other                                                       60  8.39
6 Not in paid work (e.g. homemaker', 'retired or disabled)    29  4.06
7 Due to start a new job within the next month                13  1.82

5.3 Internal consistencies

On the trait/dimensional level:

# created in study 1 cleaning script 
base::load("data/int_consist_traits_st1.rda")
kable(int_consist_traits_st1, digits = 3)
trait rel_alpha_current rel_alpha_ideal rel_omega_t_current rel_omega_t_ideal rel_omega_h_current rel_omega_h_ideal
lifesat 0.860 NA 0.890 NA 0.720 NA
meaning 0.861 NA 0.932 NA 0.512 NA
selfes 0.904 NA 0.921 NA 0.704 NA
concept 0.879 NA 0.900 NA 0.748 NA
extra 0.831 0.695 0.867 0.754 0.639 0.462
agree 0.777 0.768 0.831 0.822 0.573 0.636
consc 0.876 0.793 0.899 0.827 0.726 0.682
neuro 0.894 0.762 0.913 0.808 0.733 0.674
openn 0.777 0.718 0.834 0.797 0.580 0.554

McDonald’s omega only really makes sense for the Big Five dimensions (with their three facets each) but I’ve added it for the well-being measures as well. Keep in mind that a few of the omega computations for the well-being measures only converged with error messages. These constructs were not neccessarily intended to be tested in this multidimensional manner for internal consistency.

On the facet level:

# created in study 1 cleaning script 
base::load("data/int_consist_facets_st1.rda")
kable(int_consist_facets_st1, digits = 3)
facet rel_alpha_current rel_alpha_ideal
socia 0.801 0.604
asser 0.697 0.531
energ 0.691 0.502
compa 0.496 0.450
respe 0.694 0.623
trust 0.644 0.619
organ 0.827 0.562
produ 0.770 0.640
respo 0.644 0.571
anxie 0.726 0.421
depre 0.811 0.556
volat 0.810 0.651
curio 0.620 0.506
aesth 0.574 0.448
imagi 0.705 0.526

5.4 General change/acceptance goals

Summary stats:

table(df_sbsa$sb06_01) # How much do you want to change your personality in general?

  1   2   3   4   5 
 22  63 153  90  28 
summary(df_sbsa$sb06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00    3.00    3.00    3.11    4.00    5.00    1015 
table(df_sbsa$sa06_01) # How much do you want to be better at accepting yourself for who you are?

  1   2   3   4   5 
  6  10  50 110 163 
summary(df_sbsa$sa06_01)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  1.000   4.000   4.000   4.221   5.000   5.000    1032 

Plot:

cowplot::plot_grid(
  ggplot(df_sbsa %>% filter(!is.na(sb06_01)), aes(x=sb06_01)) + geom_histogram(bins=5) + 
  labs(x="General change goal", y="Frequency") + theme_bw(),
  ggplot(df_sbsa %>% filter(!is.na(sa06_01)), aes(x=sa06_01)) + geom_histogram(bins=5) + 
  labs(x="General acceptance goal", y="Frequency") + theme_bw(), 
  ncol = 2
)

5.5 Facet-specific change/acceptance goals

Self-Improvement

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you [want to] change. Please rate how much you would like to change your level of each of these traits, where 1 = I do not want to change and 5 = I want to change a lot.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to change in some of these traits. We want to know how you think you changed in each trait. Please rate how much you changed your level of each of these traits during this study, where 1 = I am completely the same and 5 = I have changed a lot.

Self Acceptance

Pre:
Here is a list of 15 personality traits. You might be high or low on any of these traits. Regardless of how high or low you are on these traits, we want to know how much you accept yourself. Please rate how much you accept your level of each of these traits, where 1 = I completely accept myself and 5 = I want to accept myself more.

Post:
Here is a list of 15 personality traits. During the study, you may have tried to accept your level on some of these traits more. We want to know how much you think you accept yourself more because of this study. Please rate how much you accept your level of each of these traits more during this study, where 1 = I accept myself the same and 5 = I accept this about myself much more.

Plot distributions

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 01], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_01)), aes(x=sb07_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_01)), aes(x=sb12_01)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_01)), aes(x=sa07_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_01)), aes(x=sa14_01)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 02], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_02)), aes(x=sb07_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_02)), aes(x=sb12_02)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_02)), aes(x=sa07_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_02)), aes(x=sa14_02)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 03], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_03)), aes(x=sb07_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_03)), aes(x=sb12_03)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_03)), aes(x=sa07_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_03)), aes(x=sa14_03)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 04], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_04)), aes(x=sb07_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_04)), aes(x=sb12_04)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_04)), aes(x=sa07_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_04)), aes(x=sa14_04)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 05], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_05)), aes(x=sb07_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_05)), aes(x=sb12_05)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_05)), aes(x=sa07_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_05)), aes(x=sa14_05)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 06], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_06)), aes(x=sb07_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_06)), aes(x=sb12_06)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_06)), aes(x=sa07_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_06)), aes(x=sa14_06)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 07], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_07)), aes(x=sb07_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_07)), aes(x=sb12_07)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_07)), aes(x=sa07_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_07)), aes(x=sa14_07)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 08], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_08)), aes(x=sb07_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_08)), aes(x=sb12_08)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_08)), aes(x=sa07_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_08)), aes(x=sa14_08)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 09], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_09)), aes(x=sb07_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_09)), aes(x=sb12_09)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_09)), aes(x=sa07_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_09)), aes(x=sa14_09)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 10], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_10)), aes(x=sb07_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_10)), aes(x=sb12_10)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_10)), aes(x=sa07_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_10)), aes(x=sa14_10)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 11], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_11)), aes(x=sb07_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_11)), aes(x=sb12_11)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_11)), aes(x=sa07_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_11)), aes(x=sa14_11)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 12], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_12)), aes(x=sb07_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_12)), aes(x=sb12_12)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_12)), aes(x=sa07_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_12)), aes(x=sa14_12)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

Show the code
cowplot::plot_grid(
  ggdraw() + draw_label(names(b5_vars)[5 + 13], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_13)), aes(x=sb07_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_13)), aes(x=sb12_13)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_13)), aes(x=sa07_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_13)), aes(x=sa14_13)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 14], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_14)), aes(x=sb07_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_14)), aes(x=sb12_14)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_14)), aes(x=sa07_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_14)), aes(x=sa14_14)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ggdraw() + draw_label(names(b5_vars)[5 + 15], fontface = 'plain', x = 0, hjust = 0) + theme(plot.margin = margin(0, 0, 0, 7)),
  cowplot::plot_grid(
    ggplot(df_sbsa %>% filter(!is.na(sb07_15)), aes(x=sb07_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Pre", y="Frequency") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sb12_15)), aes(x=sb12_15)) + geom_histogram(bins=5) + 
    labs(x="Change goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)), 
    ggplot(df_sbsa %>% filter(!is.na(sa07_15)), aes(x=sa07_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Pre", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
    ggplot(df_sbsa %>% filter(!is.na(sa14_15)), aes(x=sa14_15)) + geom_histogram(bins=5) + 
    labs(x="Acceptance goal: Post", y="") + theme_bw() + scale_y_continuous(breaks = c(25, 50, 75, 100, 125, 150), limits = c(0,170)),
  ncol = 4), 
  ncol = 1,
  rel_heights = c(0.1, 1, 0.1, 1, 0.1, 1)
)

5.6 Attrition analyses

Do participants who only took part in T1 differ from those taking part in T1 and T2?

Determine groups of “remainers” vs. “drop-outs” and run analyses:

Show the code
attrition_sample <- df_sbsa %>% 
  group_by(pid) %>% mutate(last_time = max(time)) %>% ungroup() %>% 
  filter(time==1) %>% 
  select(pid, last_time, 
         contains("_comb_"), c("swls", "meaning", "selfes", "concept"), # outcomes
         gender, age, ethnicity, student, employed) %>% # demographics
  mutate(remained = last_time - 1,
         female = if_else(gender=="Female", 1, 0, NA_real_),
         white = if_else(ethnicity=="White", 1, 0, NA_real_),
         black = if_else(ethnicity=="Black", 1, 0, NA_real_),
         student = if_else(student=="Yes", 1, 0, NA_real_),
         fulltime = if_else(employed=="Full-Time", 1, 0, NA_real_),
         parttime = if_else(employed=="Part-Time", 1, 0, NA_real_),
         notemployed = if_else(employed=="Unemployed (and job seeking)" | 
                                 employed=="Not in paid work (e.g. homemaker', 'retired or disabled)" | 
                                 employed=="Due to start a new job within the next month", 1, 0, NA_real_),) %>% 
  select(-c(last_time, na_comb_curr, na_comb_ideal, gender, ethnicity, employed))

attrition_analysis <- colnames(attrition_sample) %>%                                # Start with all column names
    setdiff( c("pid", "remained" ) ) %>%                 # ...that are not Sepal.Length
    rlang::syms() %>%                             # Convert them to symbols
    map( ~rlang::expr(lm(!!.x ~ remained,
                         data=attrition_sample)) ) %>%        # Create expressions
    map( eval.parent ) %>%                        # Evaluate expressions
    map( broom::tidy ) %>%                        # Tidy up the output
    bind_rows() %>%                               # Combine into a single data frame
    filter( term != "(Intercept)" ) %>%                # Drop all (Intercept) entries
    mutate(outcome = colnames(attrition_sample) %>% setdiff( c("pid", "remained" ) ))

Display significant differences:

attrition_analysis %>% filter(p.value < .05) %>% arrange(desc(abs(estimate)))
# A tibble: 4 × 6
  term     estimate std.error statistic p.value outcome         
  <chr>       <dbl>     <dbl>     <dbl>   <dbl> <chr>           
1 remained    0.335    0.130       2.57  0.0103 anxie_comb_curr 
2 remained    0.227    0.0980      2.32  0.0206 curio_comb_ideal
3 remained    0.174    0.0848      2.05  0.0410 organ_comb_ideal
4 remained    0.160    0.0760      2.10  0.0360 openn_comb_ideal
effectsize::cohens_d(anxie_comb_curr ~ remained, data = attrition_sample)
Cohen's d |         95% CI
--------------------------
-0.37     | [-0.66, -0.09]

- Estimated using pooled SD.
effectsize::cohens_d(curio_comb_ideal ~ remained, data = attrition_sample)
Cohen's d |         95% CI
--------------------------
-0.34     | [-0.62, -0.05]

- Estimated using pooled SD.
effectsize::cohens_d(organ_comb_ideal ~ remained, data = attrition_sample)
Cohen's d |         95% CI
--------------------------
-0.30     | [-0.58, -0.01]

- Estimated using pooled SD.
effectsize::cohens_d(openn_comb_ideal ~ remained, data = attrition_sample)
Cohen's d |         95% CI
--------------------------
-0.31     | [-0.59, -0.02]

- Estimated using pooled SD.

Show all results:

attrition_analysis %>% arrange(desc(abs(estimate))) %>% print(n=200)
# A tibble: 52 × 6
   term     estimate std.error statistic p.value outcome         
   <chr>       <dbl>     <dbl>     <dbl>   <dbl> <chr>           
 1 remained   0.335     0.130      2.57   0.0103 anxie_comb_curr 
 2 remained   0.258     1.36       0.189  0.850  age             
 3 remained  -0.251     0.140     -1.79   0.0746 socia_comb_curr 
 4 remained   0.239     0.122      1.95   0.0512 neuro_comb_curr 
 5 remained   0.234     0.148      1.58   0.115  volat_comb_curr 
 6 remained   0.227     0.0980     2.32   0.0206 curio_comb_ideal
 7 remained   0.217     0.150      1.44   0.149  organ_comb_curr 
 8 remained   0.186     0.118      1.57   0.116  aesth_comb_curr 
 9 remained   0.177     0.110      1.62   0.106  curio_comb_curr 
10 remained   0.174     0.0848     2.05   0.0410 organ_comb_ideal
11 remained   0.170     0.0879     1.93   0.0540 openn_comb_curr 
12 remained   0.166     0.101      1.64   0.101  aesth_comb_ideal
13 remained   0.160     0.124      1.29   0.198  energ_comb_curr 
14 remained   0.160     0.0760     2.10   0.0360 openn_comb_ideal
15 remained   0.149     0.105      1.42   0.156  compa_comb_ideal
16 remained   0.149     0.147      1.01   0.311  depre_comb_curr 
17 remained   0.146     0.116      1.25   0.210  imagi_comb_curr 
18 remained  -0.123     0.110     -1.12   0.264  respe_comb_curr 
19 remained  -0.116     0.0774    -1.50   0.133  student         
20 remained   0.115     0.113      1.02   0.309  consc_comb_curr 
21 remained   0.111     0.0981     1.14   0.256  asser_comb_ideal
22 remained  -0.110     0.102     -1.08   0.282  socia_comb_ideal
23 remained   0.0996    0.0644     1.55   0.123  black           
24 remained   0.0982    0.109      0.903  0.367  compa_comb_curr 
25 remained   0.0908    0.0716     1.27   0.205  consc_comb_ideal
26 remained  -0.0907    0.160     -0.566  0.572  meaning         
27 remained  -0.0888    0.120     -0.743  0.458  trust_comb_curr 
28 remained   0.0861    0.0935     0.921  0.357  imagi_comb_ideal
29 remained  -0.0771    0.0875    -0.881  0.378  respe_comb_ideal
30 remained  -0.0734    0.126     -0.585  0.559  asser_comb_curr 
31 remained  -0.0717    0.0727    -0.985  0.325  female          
32 remained  -0.0695    0.0874    -0.795  0.427  volat_comb_ideal
33 remained   0.0668    0.132      0.505  0.614  produ_comb_curr 
34 remained  -0.0665    0.137     -0.484  0.629  swls            
35 remained   0.0613    0.0832     0.736  0.462  produ_comb_ideal
36 remained   0.0608    0.115      0.530  0.596  respo_comb_curr 
37 remained  -0.0547    0.103     -0.529  0.597  extra_comb_curr 
38 remained  -0.0546    0.127     -0.431  0.666  selfes          
39 remained   0.0533    0.0931     0.573  0.567  energ_comb_ideal
40 remained   0.0466    0.106      0.442  0.659  trust_comb_ideal
41 remained  -0.0448    0.0623    -0.719  0.472  notemployed     
42 remained   0.0395    0.0806     0.490  0.624  agree_comb_ideal
43 remained   0.0394    0.0697     0.565  0.572  white           
44 remained  -0.0380    0.0886    -0.429  0.668  agree_comb_curr 
45 remained   0.0376    0.0920     0.409  0.683  respo_comb_ideal
46 remained   0.0373    0.0773     0.483  0.629  fulltime        
47 remained  -0.0353    0.0717    -0.493  0.622  neuro_comb_ideal
48 remained  -0.0346    0.121     -0.287  0.774  concept         
49 remained  -0.0254    0.0798    -0.318  0.751  depre_comb_ideal
50 remained  -0.0223    0.0594    -0.376  0.707  parttime        
51 remained   0.0183    0.0715     0.256  0.798  extra_comb_ideal
52 remained  -0.0110    0.0964    -0.114  0.909  anxie_comb_ideal

6 Confirmatory results

6.1 H1: Well-being - similarity correlations (H4 in paper)

All four psychological well-being indicators will be positively correlated with a greater similarity between current- and ideal personality-ratings of personality.

To examine this at the level of overall profiles, we will compute the correlations between the psychological well-being indicators and the Fisher z transformed correlations between the facet- and item-level real-ideal personality-profiles. To examine this at the level of individual traits, we will compute the correlation between psychological well-being indicators and the squared difference between current- and ideal personality rating for each Big Five trait and facet.

6.1.1 Profile similarity

Computations:

Show the code
cormat_profile <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")

rownames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
corrplot(cormat_profile, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Positive correlations of well-being indicators with profile similarity between current personality and ideal personality personality. Especially high correlation with self-esteem. High congruence of item-level and facet-level profile similarity.

As a table with confidence intervals - profile similarity:

Show the code
bind_rows(
  bind_cols(
  cormat_profile[5, c(1:4)] %>% as_tibble() %>% 
    mutate(wellbeing = c("swls", "meaning", "selfes", "concept"),
           profile_sim = rep("item-level", 4)) %>% 
    select(profile_sim, wellbeing, corr = value),
  correlation::cor_to_ci(cormat_profile[5, c(1:4)], n = (df_sbsa %>% filter(!is.na(swls)) 
                                        %>% tally() %>% pull())) %>% as_tibble(),
  correlation::cor_to_p(cormat_profile[5, c(1:4)], n = (df_sbsa %>% filter(!is.na(swls)) 
                                      %>% tally() %>% pull())) %>% as_tibble() %>% select(p) 
  ),
bind_cols(
  cormat_profile[6, c(1:4)] %>% as_tibble() %>% 
    mutate(wellbeing = c("swls", "meaning", "selfes", "concept"),
           profile_sim = rep("facet-level", 4)) %>% 
    select(profile_sim, wellbeing, corr = value),
  correlation::cor_to_ci(cormat_profile[6, c(1:4)], n = (df_sbsa %>% filter(!is.na(swls)) 
                                        %>% tally() %>% pull())) %>% as_tibble(),
  correlation::cor_to_p(cormat_profile[6, c(1:4)], n = (df_sbsa %>% filter(!is.na(swls)) 
                                      %>% tally() %>% pull())) %>% as_tibble() %>% select(p)
  )
) %>% kable(digits = 3)
profile_sim wellbeing corr CI_low CI_high p
item-level swls 0.471 0.428 0.511 0
item-level meaning 0.417 0.373 0.460 0
item-level selfes 0.650 0.619 0.680 0
item-level concept 0.522 0.482 0.559 0
facet-level swls 0.482 0.440 0.521 0
facet-level meaning 0.434 0.390 0.476 0
facet-level selfes 0.671 0.641 0.699 0
facet-level concept 0.559 0.521 0.594 0
6.1.1.1 Change in this relation over time and across intervention groups

Computations:

Show the code
# T1
cormat_profile_sb_t1 <- cor((df_sbsa %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t1 <- cor((df_sbsa %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

# T2
cormat_profile_sb_t2 <- cor((df_sbsa %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

cormat_profile_sa_t2 <- cor((df_sbsa %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",                                  "profile_corr_item_z", "profile_corr_facet_z")], use = "pairwise.complete.obs")
rownames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")
colnames(cormat_profile_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                              "Item-Level Profile Corr (z)", "Facet-Level Profile Corr (z)")

T1

First assessment: Self-improvement group

corrplot(cormat_profile_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_profile_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

T2
Second assessment: Self-improvement group

corrplot(cormat_profile_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_profile_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

No pronounced differences across time or groups.

6.1.2 Individual traits: squared differences

Computations:

Show the code
cormat_sqtraits <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqfacets <- cor(df_sbsa[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[6:20], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")

rownames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))
colnames(cormat_sqfacets) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[6:20]))

Big Five traits

corrplot(cormat_sqtraits, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

As a table with confidence intervals - squared differences:

Show the code
cormat_sqtraits[c(5:9), c(1:4)] %>% as_tibble() %>% 
    mutate(personality = names(b5_vars)[1:5]) %>% 
    rename(swls = `Life Satisfaction`, meaning = `Meaning in Life`, 
           selfes = `Self-Esteem`, concept = `Self Concept Clarity`) %>% 
    pivot_longer(1:4, names_to = "wellbeing", values_to = "corr") %>% 
    mutate(CI_low = correlation::cor_to_ci(corr, n = (df_sbsa %>% filter(!is.na(swls)) 
                                        %>% tally() %>% pull())) %>% 
             as_tibble() %>% pull(CI_low),
           CI_high = correlation::cor_to_ci(corr, n = (df_sbsa %>% filter(!is.na(swls)) 
                                        %>% tally() %>% pull())) %>% 
             as_tibble() %>% pull(CI_high),
           p = correlation::cor_to_p(corr, n = (df_sbsa %>% filter(!is.na(swls)) 
                                        %>% tally() %>% pull())) %>% 
             as_tibble() %>% pull(p)) %>% 
  kable(digits = 3)
personality wellbeing corr CI_low CI_high p
extraversion swls -0.375 -0.420 -0.329 0
extraversion meaning -0.315 -0.362 -0.266 0
extraversion selfes -0.451 -0.492 -0.407 0
extraversion concept -0.276 -0.325 -0.226 0
agreeableness swls -0.150 -0.202 -0.098 0
agreeableness meaning -0.111 -0.163 -0.058 0
agreeableness selfes -0.182 -0.233 -0.130 0
agreeableness concept -0.190 -0.241 -0.138 0
conscientiousness swls -0.290 -0.337 -0.240 0
conscientiousness meaning -0.261 -0.310 -0.211 0
conscientiousness selfes -0.395 -0.439 -0.350 0
conscientiousness concept -0.317 -0.364 -0.268 0
neuroticism swls -0.438 -0.480 -0.395 0
neuroticism meaning -0.386 -0.431 -0.340 0
neuroticism selfes -0.551 -0.587 -0.513 0
neuroticism concept -0.416 -0.459 -0.372 0
openness swls -0.125 -0.176 -0.072 0
openness meaning -0.143 -0.195 -0.091 0
openness selfes -0.189 -0.240 -0.137 0
openness concept -0.116 -0.168 -0.063 0

Big Five facets

corrplot(cormat_sqfacets, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
         addCoef.col ='black', number.cex = 0.6, diag = FALSE) # also add numbers

Here we see negative correlations of well-being indicators with squared trait- and facet-level mean-score differences between current personality and ideal personality personality. Especially pronounced negative correlations for neuroticism, extraversion, and conscientiousness (in that order).

6.1.2.1 Change in this relation over time and across intervention groups

Only looking at the trait level for now!

Computations:

Show the code
# T1
cormat_sqtraits_sb_t1 <- cor((df_sbsa %>% filter(rando=="Self-Improvement" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t1 <- cor((df_sbsa %>% filter(rando=="Self-Acceptance" & time==1))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t1) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

# T2
cormat_sqtraits_sb_t2 <- cor((df_sbsa %>% filter(rando=="Self-Improvement" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sb_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

cormat_sqtraits_sa_t2 <- cor((df_sbsa %>% filter(rando=="Self-Acceptance" & time==2))[, c("swls", "meaning", "selfes", "concept",
                                   paste0(str_trunc(names(b5_vars)[1:5], 5, ellipsis = ""), "_sqdiff"))], 
                       use = "pairwise.complete.obs")
rownames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))
colnames(cormat_sqtraits_sa_t2) <- c("Life Satisfaction", "Meaning in Life", "Self-Esteem" , "Self Concept Clarity", 
                               str_to_title(names(b5_vars)[1:5]))

T1

First assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

First assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t1, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T1, slightly higher correlations for agreeableness in the self-improvement group and lower correlations for openness compared to the self-acceptance group.

T2
Second assessment: Self-improvement group

corrplot(cormat_sqtraits_sb_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

Second assessment: Self-acceptance group

corrplot(cormat_sqtraits_sa_t2, type = "lower", order = "original", tl.col = "black", tl.srt = 10,
                      addCoef.col ='black', number.cex = 0.7, diag = FALSE) # also add numbers

At T2, also slightly higher correlations for agreeableness in the self-improvement group and lower correlations for openness compared to the self-acceptance group. Relatively similar results across time in both groups.

6.1.2.2 Exploratory: Controlling for initial trait levels

Additional, exploratory analysis: Are the relationships of the squared trait differences with well-being similar when we control for initial trait levels (at T1)?

Example with extraversion:

cor(df_sbsa %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(swls), 
    df_sbsa %>% filter(rando!="Waitlist-Control" & time==1) %>% pull(extra_sqdiff), 
    use = "pairwise.complete.obs") %>% round(2)
[1] -0.36
# basic model to replicate the correlation
mod_ex_1 <- lm(swls ~ extra_sqdiff, data = df_sbsa %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_1)$coef
               Estimate Std. Error   t value      Pr(>|t|)
(Intercept)   2.9651060 0.04450560  66.62322 5.355442e-304
extra_sqdiff -0.1640454 0.01612553 -10.17303  9.362207e-23
effectsize::standardize_parameters(mod_ex_1)
# Standardization method: refit

Parameter    | Std. Coef. |         95% CI
------------------------------------------
(Intercept)  |   2.37e-16 | [-0.07,  0.07]
extra_sqdiff |      -0.36 | [-0.43, -0.29]
# adjusted model controlling for initial trait level
mod_ex_2 <- lm(swls ~ extra_sqdiff + extra_comb_curr, 
               data = df_sbsa %>% filter(rando!="Waitlist-Control" & time==1))
summary(mod_ex_2)$coef
                   Estimate Std. Error   t value     Pr(>|t|)
(Intercept)      1.77356826 0.21622836  8.202293 1.142937e-15
extra_sqdiff    -0.07301225 0.02260265 -3.230252 1.295161e-03
extra_comb_curr  0.36661193 0.06516538  5.625870 2.678215e-08
effectsize::standardize_parameters(mod_ex_2)
# Standardization method: refit

Parameter       | Std. Coef. |         95% CI
---------------------------------------------
(Intercept)     |   1.78e-16 | [-0.07,  0.07]
extra_sqdiff    |      -0.16 | [-0.26, -0.06]
extra_comb_curr |       0.28 | [ 0.18,  0.38]

Reduced correlation (effect size) in the adjusted model but still significant.

Only T1:

Show the code
# prepare df
df_check_adjusted <- df_sbsa %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control" & time==1) %>% 
  select(pid, rando, 
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_sqdiff")) %>% 
      pivot_longer(ends_with("_sqdiff"), 
                   names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ swls + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_unlist <- as.data.frame(summary(df_check_adjusted_swls[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls)) {
  df_check_adjusted_swls_unlist <- 
    bind_rows(df_check_adjusted_swls_unlist, 
              as.data.frame(summary(df_check_adjusted_swls[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_unlist <- df_check_adjusted_swls_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ meaning + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_unlist <- as.data.frame(summary(df_check_adjusted_meaning[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_meaning)) {
  df_check_adjusted_meaning_unlist <- 
    bind_rows(df_check_adjusted_meaning_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_unlist <- df_check_adjusted_meaning_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ selfes + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_unlist <- as.data.frame(summary(df_check_adjusted_selfes[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_selfes)) {
  df_check_adjusted_selfes_unlist <- 
    bind_rows(df_check_adjusted_selfes_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_unlist <- df_check_adjusted_selfes_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept <- df_check_adjusted %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lm(score ~ concept + initial, data = .x))) %>% 
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_unlist <- as.data.frame(summary(df_check_adjusted_concept[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_concept)) {
  df_check_adjusted_concept_unlist <- 
    bind_rows(df_check_adjusted_concept_unlist, 
              as.data.frame(summary(df_check_adjusted_concept[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_unlist <- df_check_adjusted_concept_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.092 0.001 ** -0.066 0.017 * -0.062 0.050 -0.032 0.254
agreeableness -0.090 0.007 ** -0.082 0.014 * -0.078 0.020 * -0.087 0.010 **
conscientiousness -0.104 0.000 *** -0.117 0.000 *** -0.063 0.024 * -0.049 0.063
neuroticism -0.083 0.001 *** -0.079 0.001 ** -0.029 0.317 0.029 0.259
openness -0.099 0.002 ** -0.128 0.000 *** -0.111 0.001 *** -0.059 0.071
sociability -0.137 0.000 *** -0.092 0.002 ** -0.081 0.008 ** -0.051 0.076
assertiveness -0.082 0.007 ** -0.073 0.016 * -0.030 0.361 -0.033 0.280
energy -0.110 0.000 *** -0.055 0.054 -0.065 0.050 * -0.040 0.165
compassion -0.063 0.085 -0.066 0.072 -0.104 0.004 ** -0.084 0.022 *
respectfulness -0.077 0.013 * -0.043 0.167 -0.025 0.428 -0.074 0.019 *
trust -0.090 0.006 ** -0.096 0.003 ** -0.095 0.005 ** -0.100 0.003 **
organization -0.086 0.001 *** -0.108 0.000 *** -0.035 0.185 -0.033 0.197
productiveness -0.072 0.002 ** -0.069 0.003 ** -0.044 0.086 -0.031 0.196
responsibility -0.143 0.000 *** -0.107 0.000 *** -0.074 0.021 * -0.049 0.123
anxiety -0.063 0.017 * -0.064 0.014 * -0.028 0.338 0.015 0.585
depression -0.100 0.000 *** -0.081 0.001 *** -0.047 0.117 0.015 0.523
volatility -0.090 0.000 *** -0.083 0.001 *** -0.064 0.016 * -0.006 0.827
curiosity -0.091 0.007 ** -0.110 0.001 ** -0.083 0.014 * -0.069 0.039 *
aesthetic -0.059 0.100 -0.065 0.072 -0.025 0.483 -0.022 0.541
imagination -0.074 0.007 ** -0.097 0.000 *** -0.077 0.007 ** -0.021 0.456

Effects mostly still significant but not always at the p < .001 level. Few effects still significant for self-concept clarity. Correlation is especially strongly reduced for neuroticism and its facets depression and anxiety.

Across all time points, using a mixed model:

Show the code
# prepare df
df_check_adjusted_all <- df_sbsa %>% 
  # reshape with well-being outcomes and current trait levels
  filter(rando!="Waitlist-Control") %>% 
  select(pid, rando, time,
         swls, meaning, selfes, concept,
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  mutate(test = sub("_.*", "", test)) %>% 
  left_join(
    df_sbsa %>% 
    # reshape with squared differences -> add to previous
      filter(rando!="Waitlist-Control" & time==1) %>% 
      select(pid, rando, ends_with("_comb_curr")) %>% 
      pivot_longer(ends_with("_comb_curr"), 
                   names_to = "test", names_prefix = "facet", values_to = "initial", values_drop_na = TRUE) %>% 
      mutate(test = sub("_.*", "", test))
  )

# run models 
# swls
df_check_adjusted_swls_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ swls + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_swls_all_unlist <- as.data.frame(summary(df_check_adjusted_swls_all[[1]])$coefficients) %>% as_tibble() %>% 
  mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[1]])$Std_Coefficient) # standardized beta
for (i in 2:length(df_check_adjusted_swls_all)) {
  df_check_adjusted_swls_all_unlist <- 
    bind_rows(df_check_adjusted_swls_all_unlist, 
              as.data.frame(summary(df_check_adjusted_swls_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_swls_all[[i]])$Std_Coefficient))
}
df_check_adjusted_swls_all_unlist <- df_check_adjusted_swls_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "swls", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# meaning
df_check_adjusted_meaning_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ meaning + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_meaning_all_unlist <- as.data.frame(summary(df_check_adjusted_meaning_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_meaning_all)) {
  df_check_adjusted_meaning_all_unlist <- 
    bind_rows(df_check_adjusted_meaning_all_unlist, 
              as.data.frame(summary(df_check_adjusted_meaning_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_meaning_all[[i]])$Std_Coefficient))
}
df_check_adjusted_meaning_all_unlist <- df_check_adjusted_meaning_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "meaning", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# selfes
df_check_adjusted_selfes_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ selfes + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_selfes_all_unlist <- as.data.frame(summary(df_check_adjusted_selfes_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_selfes_all)) {
  df_check_adjusted_selfes_all_unlist <- 
    bind_rows(df_check_adjusted_selfes_all_unlist, 
              as.data.frame(summary(df_check_adjusted_selfes_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_selfes_all[[i]])$Std_Coefficient))
}
df_check_adjusted_selfes_all_unlist <- df_check_adjusted_selfes_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "selfes", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

# concept
df_check_adjusted_concept_all <- df_check_adjusted_all %>% 
  group_nest(test) %>% 
  mutate(lm_mods = map(data, ~lmerTest::lmer(score ~ concept + initial + (1 | pid), data = .x))) %>% # random intercept model
  pull(lm_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_check_adjusted_concept_all_unlist <- as.data.frame(summary(df_check_adjusted_concept_all[[1]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[1]])$Std_Coefficient)
for (i in 2:length(df_check_adjusted_concept_all)) {
  df_check_adjusted_concept_all_unlist <- 
    bind_rows(df_check_adjusted_concept_all_unlist, 
              as.data.frame(summary(df_check_adjusted_concept_all[[i]])$coefficients) %>% as_tibble() %>% 
                mutate(d = effectsize::standardize_parameters(df_check_adjusted_concept_all[[i]])$Std_Coefficient))
}
df_check_adjusted_concept_all_unlist <- df_check_adjusted_concept_all_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=3), 
               term = c(rep(c("Intercept", "concept", "initial"), 20))) %>% 
        rename(p = `Pr(>|t|)`, std_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, d, std_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars))))

Does the relationship between the squared difference in one trait (current vs. ideal) and well-being aspects still hold if we control for the initial trait level?

Combine as one table:

kable(df_check_adjusted_swls_all_unlist %>% 
        filter(!term %in% c("Intercept", "initial")) %>% 
        select(outcome, d_swls = d, p_ls = p, sig_ls = sig) %>% 
        left_join(
          df_check_adjusted_meaning_all_unlist %>% 
            filter(!term %in% c("Intercept", "initial")) %>% 
            select(outcome, d_meaning = d, p_m = p, sig_m = sig)
        ) %>% 
          left_join(
            df_check_adjusted_selfes_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_selfes = d, p_se = p, sig_se = sig)
          ) %>% 
          left_join(
            df_check_adjusted_concept_all_unlist %>% 
              filter(!term %in% c("Intercept", "initial")) %>% 
              select(outcome, d_concept = d, p_c = p, sig_c = sig)
          ), 
       digits = 3)
outcome d_swls p_ls sig_ls d_meaning p_m sig_m d_selfes p_se sig_se d_concept p_c sig_c
extraversion -0.215 0.000 *** -0.177 0.000 *** -0.246 0.000 *** -0.144 0.000 ***
agreeableness -0.135 0.000 *** -0.122 0.000 *** -0.166 0.000 *** -0.153 0.000 ***
conscientiousness -0.159 0.000 *** -0.142 0.000 *** -0.176 0.000 *** -0.127 0.000 ***
neuroticism -0.216 0.000 *** -0.183 0.000 *** -0.277 0.000 *** -0.139 0.000 ***
openness -0.122 0.000 *** -0.143 0.000 *** -0.151 0.000 *** -0.084 0.001 ***
sociability -0.235 0.000 *** -0.170 0.000 *** -0.216 0.000 *** -0.123 0.000 ***
assertiveness -0.148 0.000 *** -0.155 0.000 *** -0.165 0.000 *** -0.130 0.000 ***
energy -0.216 0.000 *** -0.155 0.000 *** -0.223 0.000 *** -0.137 0.000 ***
compassion -0.109 0.000 *** -0.091 0.001 *** -0.152 0.000 *** -0.135 0.000 ***
respectfulness -0.100 0.000 *** -0.094 0.000 *** -0.102 0.000 *** -0.138 0.000 ***
trust -0.130 0.000 *** -0.121 0.000 *** -0.167 0.000 *** -0.142 0.000 ***
organization -0.098 0.000 *** -0.110 0.000 *** -0.102 0.000 *** -0.102 0.000 ***
productiveness -0.159 0.000 *** -0.115 0.000 *** -0.172 0.000 *** -0.101 0.000 ***
responsibility -0.171 0.000 *** -0.116 0.000 *** -0.171 0.000 *** -0.116 0.000 ***
anxiety -0.175 0.000 *** -0.148 0.000 *** -0.198 0.000 *** -0.093 0.000 ***
depression -0.246 0.000 *** -0.202 0.000 *** -0.348 0.000 *** -0.143 0.000 ***
volatility -0.168 0.000 *** -0.150 0.000 *** -0.192 0.000 *** -0.139 0.000 ***
curiosity -0.089 0.001 *** -0.094 0.000 *** -0.092 0.000 *** -0.077 0.003 **
aesthetic -0.064 0.021 * -0.067 0.013 * -0.046 0.094 -0.050 0.068
imagination -0.101 0.000 *** -0.109 0.000 *** -0.128 0.000 *** -0.056 0.015 *

Almost all effects significant at the p < .001 level when we include all time points at once. Somewhat stronger effects for neuroticism and extraversion (and their facets).


6.2 H2: Well-being - latent change (H5 in paper)

Both groups will increase in all four psychological well-being indicators.

We will test the mean-level difference between baseline and follow up using a latent change model.

6.2.1 Life satisfaction

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_swls_hyp2 <- '
swls_t1 =~ 1*sw06_01_t1 + lamb2*sw06_02_t1 + lamb3*sw06_03_t1 + lamb4*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + lamb2*sw06_02_t2 + lamb3*sw06_03_t2 + lamb4*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ 1           # This estimates the intercept of the change score 
swls_t1 ~ 1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ res1*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ res2*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ res3*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ res4*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ res1*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ res2*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ res3*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ res4*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ m3*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ m4*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ m3*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ m4*1     # This estimates the intercept of X4 at T2
'
fit_mi_lcs_swls_hyp2 <- lavaan(mi_lcs_swls_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_swls_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_swls_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 19 14257.04 14343.89 0.991 0.04 0.029
# parameters of interest
params_lcs_swls_hyp2 <- broom::tidy(fit_mi_lcs_swls_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("swls_t2 ~ swls_t1", "d_swls_1 =~ swls_t2", "swls_t1 ~~ d_swls_1", # change parameters
                           "d_swls_1 ~1 ", "swls_t1 ~1 ", "", # means
                           "d_swls_1 ~~ d_swls_1")) # variances
kable(params_lcs_swls_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
swls_t2 ~ swls_t1 1.000 1.000 1.000 0.936 NA NA
d_swls_1 =~ swls_t2 1.000 1.000 1.000 0.662 NA NA
d_swls_1 ~1 0.288 0.226 0.351 0.435 9.048 0
swls_t1 ~1 2.696 2.614 2.778 2.872 64.385 0
d_swls_1 ~~ d_swls_1 0.441 0.351 0.530 1.000 9.644 0
swls_t1 ~~ d_swls_1 -0.158 -0.217 -0.099 -0.253 -5.237 0

Plot model:

semPaths(fit_mi_lcs_swls_hyp2, what="est", 
         sizeLat = 7, sizeMan = 7, edge.label.cex = .75, intercepts = T, edge.color="black")

Significantly higher life satisfaction at the post test, b = 0.288, p = 0. Those with initially higher levels of life satisfaction (at T1) change to a lesser degree.

6.2.2 Meaning in life

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_meaning_hyp2 <- '
meaning_t1 =~ 1*meaning_par1_t1 + lamb2*meaning_par2_t1 + lamb3*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + lamb2*meaning_par2_t2 + lamb3*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1              # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ 1              # This estimates the intercept of the change score 
meaning_t1 ~ 1               # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

meaning_par1_t1 ~~ meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ res1*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ res2*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ res3*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ res1*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ res2*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ res3*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_meaning_hyp2 <- lavaan(mi_lcs_meaning_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_meaning_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_meaning_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 15 10454.07 10522.63 0.995 0.042 0.025
# parameters of interest
params_lcs_meaning_hyp2 <- broom::tidy(fit_mi_lcs_meaning_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("meaning_t2 ~ meaning_t1", "d_meaning_1 =~ meaning_t2", "meaning_t1 ~~ d_meaning_1", # change parameters
                           "d_meaning_1 ~1 ", "meaning_t1 ~1 ", "", # means
                           "d_meaning_1 ~~ d_meaning_1")) # variances

kable(params_lcs_meaning_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
meaning_t2 ~ meaning_t1 1.000 1.000 1.000 0.957 NA NA
d_meaning_1 =~ meaning_t2 1.000 1.000 1.000 0.843 NA NA
d_meaning_1 ~1 0.279 0.208 0.349 0.341 7.721 0
meaning_t1 ~1 3.216 3.133 3.299 3.467 76.110 0
d_meaning_1 ~~ d_meaning_1 0.668 0.524 0.813 1.000 9.046 0
meaning_t1 ~~ d_meaning_1 -0.295 -0.377 -0.213 -0.389 -7.027 0

Participants improved significantly in meaning in life across time, b = 0.279, p = 0.

6.2.3 Self-esteem

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_selfes_hyp2 <- '
selfes_t1 =~ 1*selfes_par1_t1 + lamb2*selfes_par2_t1 + lamb3*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + lamb2*selfes_par2_t2 + lamb3*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1             # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ 1             # This estimates the intercept of the change score 
selfes_t1 ~ 1              # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ selfes_t1    # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

selfes_par1_t1 ~~ selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ res1*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ res2*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ res3*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ res1*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ res2*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ res3*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_selfes_hyp2 <- lavaan(mi_lcs_selfes_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_selfes_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_selfes_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 15 7336.702 7405.265 1 0 0.009
# parameters of interest
params_lcs_selfes_hyp2 <- broom::tidy(fit_mi_lcs_selfes_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("selfes_t2 ~ selfes_t1", "d_selfes_1 =~ selfes_t2", "selfes_t1 ~~ d_selfes_1", # change parameters
                           "d_selfes_1 ~1 ", "selfes_t1 ~1 ", "", # means
                           "d_selfes_1 ~~ d_selfes_1")) # variances

kable(params_lcs_selfes_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
selfes_t2 ~ selfes_t1 1.000 1.000 1.000 0.993 NA NA
d_selfes_1 =~ selfes_t2 1.000 1.000 1.000 0.720 NA NA
d_selfes_1 ~1 0.285 0.238 0.332 0.520 11.953 0
selfes_t1 ~1 3.127 3.065 3.190 4.138 97.548 0
d_selfes_1 ~~ d_selfes_1 0.300 0.244 0.357 1.000 10.402 0
selfes_t1 ~~ d_selfes_1 -0.146 -0.186 -0.106 -0.352 -7.150 0

Participants increased significantly in self-esteem between the two assessments, b = 0.285, p = 0.

6.2.4 Self concept clarity

Fit model:

Show the code
# Code snippets adapted from Kievit et al. (2018) -- CC-BY -- https://doi.org/10.1016/j.dcn.2017.11.007

# Fit the multiple indicator Univariate Latent Change Score model
mi_lcs_concept_hyp2 <- '
concept_t1 =~ 1*concept_par1_t1 + lamb2*concept_par2_t1 + lamb3*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + lamb2*concept_par2_t2 + lamb3*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1              # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ 1              # This estimates the intercept of the change score 
concept_t1 ~ 1               # This estimates the intercept of concept_t1 
d_concept_1 ~~ d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ concept_t1    # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

concept_par1_t1 ~~ concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ res1*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ res2*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ res3*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ res1*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ res2*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ res3*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
'
fit_mi_lcs_concept_hyp2 <- lavaan(mi_lcs_concept_hyp2, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_concept_hyp2, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary:

# model fit
kable(broom::glance(fit_mi_lcs_concept_hyp2) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
714 15 8360.688 8429.252 0.998 0.023 0.022
# parameters of interest
params_lcs_concept_hyp2 <- broom::tidy(fit_mi_lcs_concept_hyp2, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("concept_t2 ~ concept_t1", "d_concept_1 =~ concept_t2", "concept_t1 ~~ d_concept_1", # change parameters
                           "d_concept_1 ~1 ", "concept_t1 ~1 ", "", # means
                           "d_concept_1 ~~ d_concept_1")) # variances

kable(params_lcs_concept_hyp2, digits = 3)
term estimate conf.low conf.high std.all statistic p.value
concept_t2 ~ concept_t1 1.000 1.000 1.000 0.960 NA NA
d_concept_1 =~ concept_t2 1.000 1.000 1.000 0.825 NA NA
d_concept_1 ~1 0.202 0.154 0.250 0.360 8.188 0
concept_t1 ~1 2.928 2.871 2.986 4.483 99.444 0
d_concept_1 ~~ d_concept_1 0.315 0.253 0.377 1.000 9.927 0
concept_t1 ~~ d_concept_1 -0.139 -0.176 -0.103 -0.380 -7.512 0

Self concept clarity improved significantly across time, b = 0.202, p = 0.


6.3 H3: Distance between ideal- and current personality over time (H1 in paper)

The distance between ideal- and current personality will decrease in both groups.

We will use two strategies to test this hypothesis. First, we will compute the Fisher z-transformed profile correlation between current- and ideal personality and test whether it increased across assessments. Second, we will test whether the squared difference between current- and ideal personality ratings for each Big Five trait decreased across assessments. We will test mean-level differences in profile correlations and squared differences between baseline and follow up using repeated-measures t-test.

6.3.1 Profile similarity

Reshape to wide:

Show the code
# reshape to wide
df_sbsa_wide_profdiff <- df_sbsa %>% 
  arrange(pid, time) %>% 
  select(pid, time, profile_corr_item_z, profile_corr_facet_z, ends_with("_sqdiff")) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = -c(pid, time))

Checking assumptions

# item-level profile correlation
shapiro.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1
W = 0.92573, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$profile_corr_item_z_t2 - df_sbsa_wide_profdiff$profile_corr_item_z_t1
D = 0.088592, p-value = 2.99e-13
# descriptives
psych::describe(df_sbsa_wide_profdiff$profile_corr_item_z_t1)
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 704 0.37 0.47   0.36    0.35 0.45 -1.05 2.25   3.3 0.49     0.88 0.02
psych::describe(df_sbsa_wide_profdiff$profile_corr_item_z_t2)
   vars   n mean   sd median trimmed mad  min  max range skew kurtosis   se
X1    1 664 0.55 0.53   0.51    0.53 0.5 -0.9 3.32  4.22 0.71     2.48 0.02
# facet-level profile correlation
shapiro.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1
W = 0.94494, p-value = 7.556e-15
lillie.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$profile_corr_facet_z_t2 - df_sbsa_wide_profdiff$profile_corr_facet_z_t1
D = 0.076821, p-value = 8.307e-10
# descriptives
psych::describe(df_sbsa_wide_profdiff$profile_corr_facet_z_t1)
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 704 0.28 0.65   0.22    0.25 0.64 -1.5 2.67  4.17  0.5     0.51 0.02
psych::describe(df_sbsa_wide_profdiff$profile_corr_facet_z_t2)
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 664  0.5 0.73   0.47    0.48 0.73 -1.22 3.73  4.96 0.46     0.78 0.03

Results summary:

t_profile_corr_item <- t.test(df_sbsa_wide_profdiff$profile_corr_item_z_t2, df_sbsa_wide_profdiff$profile_corr_item_z_t1, paired = TRUE)
t_profile_corr_facet <- t.test(df_sbsa_wide_profdiff$profile_corr_facet_z_t2, df_sbsa_wide_profdiff$profile_corr_facet_z_t1, paired = TRUE)

kable(bind_rows(tidy(t_profile_corr_item), tidy(t_profile_corr_facet)) %>% mutate(outcome = c("Item-level profile corr.", "Facet-level profile corr.")) %>% select(outcome, everything()), digits = 3)
outcome estimate statistic p.value parameter conf.low conf.high method alternative
Item-level profile corr. 0.181 11.457 0 652 0.150 0.212 Paired t-test two.sided
Facet-level profile corr. 0.227 10.775 0 652 0.186 0.268 Paired t-test two.sided
# effect sizes
d_profile_corr_item <- psych::cohen.d(profile_corr_item_z ~ time, data = df_sbsa)
d_profile_corr_item$cohen.d
                        lower    effect     upper
profile_corr_item_z 0.2563996 0.3633649 0.4701992
d_profile_corr_facet <- psych::cohen.d(profile_corr_facet_z ~ time, data = df_sbsa)
d_profile_corr_facet$cohen.d
                        lower    effect    upper
profile_corr_facet_z 0.221792 0.3285939 0.435276

Plot

profile_df_plot <- df_sbsa %>% select(pid, time, profile_corr_item_z, profile_corr_facet_z) %>% 
  pivot_longer(-c(pid, time), names_to = "itemfacet", values_to = "corr") %>% 
  mutate(itemfacet2 = fct_recode(itemfacet, "Item-level" = "profile_corr_item_z", "Facet-level" = "profile_corr_facet_z"),
         itemfacet2 = fct_reorder(itemfacet2, corr, .desc = F))

ggplot(profile_df_plot) + 
  aes(x = as.factor(time), y = corr) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  facet_wrap(vars(itemfacet2)) +
  labs(x = "Measurement Occasion", y = "Profile correlation") + # title = "Distance between ideal- and current personality"
  theme_bw()

Significantly higher profile correlations at the second measurement occasion, both for the item-level profile correlation and the facet-level profile correlations.

6.3.2 Individual traits: squared differences

Checking assumptions

# extra
shapiro.test(df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1
W = 0.869, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$extra_sqdiff_t2 - df_sbsa_wide_profdiff$extra_sqdiff_t1
D = 0.15365, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$extra_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 704 1.85 2.05   1.17    1.47 1.48   0 11.11 11.11 1.76     3.26 0.08
psych::describe(df_sbsa_wide_profdiff$extra_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 664 1.34 1.62   0.77    1.01 0.88   0 10.56 10.56 2.03     4.65 0.06
# agree
shapiro.test(df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1
W = 0.77856, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$agree_sqdiff_t2 - df_sbsa_wide_profdiff$agree_sqdiff_t1
D = 0.19487, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$agree_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 704 0.55 0.91   0.25    0.35 0.33   0 8.03  8.03 3.75    19.28 0.03
psych::describe(df_sbsa_wide_profdiff$agree_sqdiff_t2)
   vars   n mean   sd median trimmed mad min   max range skew kurtosis   se
X1    1 664  0.4 0.74   0.14    0.24 0.2   0 10.03 10.03  5.7     54.3 0.03
# consc
shapiro.test(df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1
W = 0.83389, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$consc_sqdiff_t2 - df_sbsa_wide_profdiff$consc_sqdiff_t1
D = 0.15295, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$consc_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 704 1.71 2.08      1    1.32 1.32   0 14.06 14.06 2.23     6.73 0.08
psych::describe(df_sbsa_wide_profdiff$consc_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 664 1.37 1.78   0.69    1.02 0.99   0 14.69 14.69 2.68    10.82 0.07
# neuro
shapiro.test(df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1
W = 0.91045, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$neuro_sqdiff_t2 - df_sbsa_wide_profdiff$neuro_sqdiff_t1
D = 0.11858, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$neuro_sqdiff_t1)
   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
X1    1 704 3.29 3.41   2.25    2.72 2.68   0  16    16  1.4      1.5 0.13
psych::describe(df_sbsa_wide_profdiff$neuro_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min   max range skew kurtosis   se
X1    1 664 2.67 3.09   1.56    2.07 1.95   0 15.34 15.34 1.74     2.78 0.12
# openn
shapiro.test(df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1) 

    Shapiro-Wilk normality test

data:  df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1
W = 0.80041, p-value < 2.2e-16
lillie.test(df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  df_sbsa_wide_profdiff$openn_sqdiff_t2 - df_sbsa_wide_profdiff$openn_sqdiff_t1
D = 0.19929, p-value < 2.2e-16
# descriptives
psych::describe(df_sbsa_wide_profdiff$openn_sqdiff_t1)
   vars   n mean  sd median trimmed  mad min  max range skew kurtosis   se
X1    1 704 0.48 0.8   0.17    0.29 0.25   0 5.84  5.84 2.96    10.71 0.03
psych::describe(df_sbsa_wide_profdiff$openn_sqdiff_t2)
   vars   n mean   sd median trimmed  mad min  max range skew kurtosis   se
X1    1 664 0.37 0.61   0.11    0.23 0.15   0 4.34  4.34 3.05    11.98 0.02

Results summary:

mod_traits_sqdiff <- df_sbsa_wide_profdiff %>% 
  select(-starts_with("profile")) %>% 
  pivot_longer(-c(pid), 
               names_to = c("test", "time"), values_to = "score", 
               names_pattern = "(.*)_(t1|t2)") %>% 
  filter(!is.na(score)) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(t_tests = map(data, ~t.test(score ~ relevel(as.factor(time), "t2"), # need to relevel this to get T2-T1 diff (not sure why)
                                     data = .x, paired = TRUE))) %>% 
  pull(t_tests) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_unlist <- mod_traits_sqdiff[[1]] %>% tidy()
for (i in 2:length(mod_traits_sqdiff)) {
  mod_traits_unlist <- bind_rows(mod_traits_unlist, mod_traits_sqdiff[[i]] %>% tidy())
}

kable(mod_traits_unlist %>% mutate(outcome = sort(names(b5_vars))) %>% 
        select(outcome, everything()) %>% arrange(factor(outcome, levels = (names(b5_vars)))), digits = 3) # order by BFI traits
outcome estimate statistic p.value parameter conf.low conf.high method alternative
extraversion -0.504 -7.743 0.000 652 -0.632 -0.376 Paired t-test two.sided
agreeableness -0.161 -5.348 0.000 652 -0.220 -0.102 Paired t-test two.sided
conscientiousness -0.323 -5.037 0.000 652 -0.448 -0.197 Paired t-test two.sided
neuroticism -0.672 -7.043 0.000 652 -0.860 -0.485 Paired t-test two.sided
openness -0.118 -4.269 0.000 652 -0.173 -0.064 Paired t-test two.sided
sociability -0.814 -8.158 0.000 652 -1.010 -0.618 Paired t-test two.sided
assertiveness -0.491 -5.652 0.000 652 -0.661 -0.320 Paired t-test two.sided
energy -0.490 -5.238 0.000 652 -0.674 -0.307 Paired t-test two.sided
compassion -0.150 -3.933 0.000 652 -0.225 -0.075 Paired t-test two.sided
respectfulness -0.165 -3.930 0.000 652 -0.247 -0.082 Paired t-test two.sided
trust -0.354 -5.091 0.000 652 -0.490 -0.217 Paired t-test two.sided
organization -0.374 -4.056 0.000 652 -0.556 -0.193 Paired t-test two.sided
productiveness -0.529 -5.388 0.000 652 -0.722 -0.336 Paired t-test two.sided
responsibility -0.245 -3.659 0.000 652 -0.377 -0.114 Paired t-test two.sided
anxiety -0.699 -4.979 0.000 652 -0.975 -0.423 Paired t-test two.sided
depression -0.901 -7.331 0.000 652 -1.143 -0.660 Paired t-test two.sided
volatility -0.617 -5.618 0.000 652 -0.833 -0.402 Paired t-test two.sided
curiosity -0.156 -3.434 0.001 652 -0.245 -0.067 Paired t-test two.sided
aesthetic -0.129 -2.877 0.004 652 -0.216 -0.041 Paired t-test two.sided
imagination -0.238 -3.573 0.000 652 -0.369 -0.107 Paired t-test two.sided
# effect sizes
cohend_cust = function(outcome, df) {
  form = as.formula(paste0(outcome, " ~ time"))
  psych::cohen.d(form, data = df)
}

d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[1], 5, ellipsis = ""), "_sqdiff"), df_sbsa)
d_traits_unlist <- as_tibble(d_trait$cohen.d)
for (i in 2:length(names(b5_vars))) {
  d_trait <- cohend_cust(paste0(str_trunc(names(b5_vars)[i], 5, ellipsis = ""), "_sqdiff"), df_sbsa)
  d_traits_unlist <- bind_rows(d_traits_unlist, as_tibble(d_trait$cohen.d))
}
kable(d_traits_unlist %>% mutate(outcome = names(b5_vars)) %>% select(outcome, everything()), digits = 3)
outcome lower effect upper
extraversion -0.380 -0.274 -0.167
agreeableness -0.289 -0.183 -0.077
conscientiousness -0.282 -0.176 -0.069
neuroticism -0.298 -0.192 -0.085
openness -0.269 -0.163 -0.056
sociability -0.375 -0.268 -0.162
assertiveness -0.320 -0.214 -0.108
energy -0.324 -0.217 -0.111
compassion -0.272 -0.166 -0.060
respectfulness -0.251 -0.145 -0.039
trust -0.301 -0.195 -0.089
organization -0.267 -0.160 -0.054
productiveness -0.290 -0.184 -0.077
responsibility -0.244 -0.138 -0.031
anxiety -0.258 -0.151 -0.045
depression -0.339 -0.233 -0.127
volatility -0.275 -0.169 -0.063
curiosity -0.251 -0.145 -0.039
aesthetic -0.258 -0.152 -0.046
imagination -0.224 -0.118 -0.012

[Note: These CIs for d are probably “wrong” -> not appropriate for paired t-test]

Significantly lower squared mean-level differences at the second measurement occasion, both for the Big Five traits and the 15 BFI-2 facets.

Plot (traits/facets sorted by average size of squared differences)

sqdiff_df_plot <- df_sbsa %>% 
  select(pid, time, all_of(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"))) %>% 
  pivot_longer(-c(pid, time), names_to = "trait", values_to = "sqdiff") %>% 
  group_by(trait) %>% 
  mutate(cur_group_id()) %>% 
  ungroup() %>% 
  mutate(trait2 = fct_recode(trait, !!! setNames(paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_sqdiff"),
                                                 str_to_title(names(b5_vars)))),
         trait2 = fct_reorder(trait2, sqdiff, .desc = T))

plot_sqdiff <- ggplot(sqdiff_df_plot) + 
  aes(x = as.factor(time), y = sqdiff) + 
  geom_boxplot() + 
  geom_violin(fill = NA) +
  ggforce::facet_wrap_paginate(~trait2, ncol=3, nrow=2) +
  labs(x = "Measurement Occasion", y = "Squared difference") + 
  theme_bw()

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 1)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 2)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 3)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 4)

plot_sqdiff + ggforce::facet_wrap_paginate(~trait2, ncol=4, nrow=1, page = 5)

For some of the facets, the distribution look very similar and differences over time are perhaps driven by outliers.


6.4 H4: Change goals and change in personality (current / ideal) in self-improvement group

In the self-improvement group, there will be a correlation between change goals and change in current personality ratings but not change in ideal personality ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level differences across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb <- df_sbsa %>% 
  filter(rando=="Self-Improvement") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07")), # facet-specific change goals
         sb06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sb07"), sb06_01)) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, sb06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa_wide_pers_sb <- df_sbsa_wide_pers_sb %>% 
  mutate_at(c(colnames(df_sbsa_wide_pers_sb)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa_wide_pers_sb)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Improvement") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb)

6.4.1 Big Five traits

6.4.1.1 Extraversion - current personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp4 <- lavaan(mi_lcs_extra_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4752.418 4822.764 0.983 0.058 0.081
# parameters of interest
params_lcs_extra_curr_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.985 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.590 NA NA
d_extra_1 ~1 0.134 0.085 0.182 0.388 5.431 0.000
extra_t1 ~1 2.756 2.684 2.827 4.790 75.483 0.000
d_extra_1 ~~ d_extra_1 0.119 0.073 0.165 1.000 5.033 0.000
extra_t1 ~~ d_extra_1 -0.054 -0.086 -0.023 -0.274 -3.366 0.001
d_extra_1 ~~ sb06_01_t1 0.064 0.012 0.117 0.187 2.423 0.015
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.193 0.000
sb06_01_t1 ~1 0.002 -0.101 0.106 0.002 0.047 0.963

The correlation of the general change goal with the extraversion change score (current personality) is significantly different from zero, r = 0.187, p = 0.015.

6.4.1.2 Extraversion - ideal personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp4 <- lavaan(mi_lcs_extra_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4434.03 4504.376 0.993 0.027 0.036
# parameters of interest
params_lcs_extra_ideal_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.942 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.594 NA NA
d_extra_1 ~1 -0.029 -0.079 0.022 -0.095 -1.104 0.270
extra_t1 ~1 3.717 3.653 3.781 7.822 114.026 0.000
d_extra_1 ~~ d_extra_1 0.090 0.042 0.138 1.000 3.685 0.000
extra_t1 ~~ d_extra_1 -0.031 -0.066 0.005 -0.214 -1.691 0.091
d_extra_1 ~~ sb06_01_t1 0.061 0.008 0.114 0.203 2.245 0.025
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.197 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.002 0.999

Correlation of general change goal with extraversion change score (ideal personality) is significantly different from zero, r = 0.203, p = 0.025.

6.4.1.3 Extraversion - current personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp4 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp4 <- lavaan(mi_lcs_extra_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6725.664 6823.366 0.942 0.086 0.124
# parameters of interest
params_lcs_extra_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.997 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.603 NA NA
d_extra_1 ~1 0.133 0.085 0.181 0.383 5.435 0.000
extra_t1 ~1 2.756 2.684 2.827 4.798 75.531 0.000
d_extra_1 ~~ d_extra_1 0.121 0.074 0.167 1.000 5.077 0.000
extra_t1 ~~ d_extra_1 -0.059 -0.092 -0.027 -0.298 -3.598 0.000
goals ~~ d_extra_1 0.008 -0.026 0.042 0.048 0.458 0.647
goals ~~ goals 0.227 0.056 0.397 1.000 2.604 0.009

Correlation of specific, facet-level change goals with extraversion change score (current personality) is not significantly different from zero, r = 0.048, p = 0.647.

6.4.1.4 Extraversion - ideal personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp4 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sb07_01_t1 + sb07_02_t1 + sb07_03_t1 # latent change goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
d_extra_1 ~~ extra_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_01_t1 ~~ sb07_01_t1
sb07_02_t1 ~~ sb07_02_t1
sb07_03_t1 ~~ sb07_03_t1

sb07_01_t1 ~ 1
sb07_02_t1 ~ 1
sb07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp4 <- lavaan(mi_lcs_extra_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6404.22 6501.922 0.949 0.061 0.085
# parameters of interest
params_lcs_extra_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.945 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.600 NA NA
d_extra_1 ~1 -0.029 -0.080 0.021 -0.098 -1.138 0.255
extra_t1 ~1 3.717 3.653 3.781 7.849 114.077 0.000
d_extra_1 ~~ d_extra_1 0.090 0.041 0.140 1.000 3.598 0.000
extra_t1 ~~ d_extra_1 -0.032 -0.069 0.006 -0.223 -1.665 0.096
goals ~~ d_extra_1 0.026 -0.028 0.081 0.173 0.948 0.343
goals ~~ goals 0.259 0.053 0.465 1.000 2.463 0.014

Correlation of specific, facet-level change goals with extraversion change score (ideal personality) is not significantly different from zero, r = 0.173, p = 0.343.

6.4.1.5 Agreeableness - current personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp4 <- lavaan(mi_lcs_agree_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4220.772 4291.118 0.99 0.037 0.035
# parameters of interest
params_lcs_agree_curr_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.062 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.076 0.039 0.114 0.356 3.968 0.000
agree_t1 ~1 3.357 3.295 3.418 7.983 107.627 0.000
d_agree_1 ~~ d_agree_1 0.046 0.022 0.069 1.000 3.847 0.000
agree_t1 ~~ d_agree_1 -0.033 -0.050 -0.016 -0.365 -3.719 0.000
d_agree_1 ~~ sb06_01_t1 -0.014 -0.047 0.020 -0.064 -0.805 0.421
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.193 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.005 0.996

Correlation of general change goal with agreeableness change score (current personality) is not significantly different from zero, r = -0.064, p = 0.421.

6.4.1.6 Agreeableness - ideal personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp4 <- lavaan(mi_lcs_agree_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4322.324 4392.669 0.999 0.012 0.031
# parameters of interest
params_lcs_agree_ideal_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.042 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.695 NA NA
d_agree_1 ~1 0.032 -0.007 0.070 0.114 1.617 0.106
agree_t1 ~1 3.710 3.643 3.777 8.891 108.194 0.000
d_agree_1 ~~ d_agree_1 0.077 0.040 0.115 1.000 4.079 0.000
agree_t1 ~~ d_agree_1 -0.046 -0.072 -0.019 -0.392 -3.336 0.001
d_agree_1 ~~ sb06_01_t1 0.016 -0.026 0.059 0.058 0.742 0.458
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.191 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.007 0.994

Correlation of general change goal with agreeableness change score (ideal personality) is not significantly different from zero, r = 0.058, p = 0.458.

6.4.1.7 Agreeableness - current personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp4 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp4 <- lavaan(mi_lcs_agree_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6068.744 6166.446 0.964 0.061 0.078
# parameters of interest
params_lcs_agree_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.059 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.537 NA NA
d_agree_1 ~1 0.076 0.039 0.114 0.357 3.974 0.000
agree_t1 ~1 3.357 3.295 3.418 7.972 107.605 0.000
d_agree_1 ~~ d_agree_1 0.046 0.023 0.069 1.000 3.900 0.000
agree_t1 ~~ d_agree_1 -0.032 -0.049 -0.015 -0.360 -3.720 0.000
goals ~~ d_agree_1 0.004 -0.021 0.029 0.028 0.303 0.762
goals ~~ goals 0.425 0.269 0.581 1.000 5.327 0.000

Correlation of specific, facet-level change goals with agreeableness change score (current personality) is not significantly different from zero, r = 0.028, p = 0.762.

6.4.1.8 Agreeableness - ideal personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp4 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sb07_04_t1 + sb07_05_t1 + sb07_06_t1 # latent change goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
d_agree_1 ~~ agree_t1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_04_t1 ~~ sb07_04_t1
sb07_05_t1 ~~ sb07_05_t1
sb07_06_t1 ~~ sb07_06_t1

sb07_04_t1 ~ 1
sb07_05_t1 ~ 1
sb07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp4 <- lavaan(mi_lcs_agree_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6168.3 6266.002 0.995 0.022 0.035
# parameters of interest
params_lcs_agree_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.042 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.695 NA NA
d_agree_1 ~1 0.032 -0.006 0.070 0.115 1.640 0.101
agree_t1 ~1 3.710 3.642 3.777 8.869 108.172 0.000
d_agree_1 ~~ d_agree_1 0.078 0.040 0.115 1.000 4.080 0.000
agree_t1 ~~ d_agree_1 -0.046 -0.073 -0.019 -0.393 -3.352 0.001
goals ~~ d_agree_1 -0.020 -0.050 0.009 -0.113 -1.368 0.171
goals ~~ goals 0.422 0.261 0.583 1.000 5.143 0.000

Correlation of specific, facet-level change goals with agreeableness change score (ideal personality) is not significantly different from zero, r = -0.113, p = 0.171.

6.4.1.9 Conscientiousness - current personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp4 <- lavaan(mi_lcs_consc_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4452.802 4523.147 0.991 0.049 0.064
# parameters of interest
params_lcs_consc_curr_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.036 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.505 NA NA
d_consc_1 ~1 0.124 0.075 0.173 0.342 4.949 0.000
consc_t1 ~1 3.552 3.468 3.635 4.793 83.287 0.000
d_consc_1 ~~ d_consc_1 0.131 0.087 0.175 1.000 5.839 0.000
consc_t1 ~~ d_consc_1 -0.084 -0.125 -0.043 -0.313 -3.979 0.000
d_consc_1 ~~ sb06_01_t1 0.007 -0.039 0.054 0.021 0.311 0.756
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.003 0.997

Correlation of general change goal with conscientiousness change score (current personality) is not significantly different from zero, r = 0.021, p = 0.756.

6.4.1.10 Conscientiousness - ideal personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp4 <- lavaan(mi_lcs_consc_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 3795.705 3866.05 0.998 0.018 0.026
# parameters of interest
params_lcs_consc_ideal_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.085 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.781 NA NA
d_consc_1 ~1 0.024 -0.023 0.071 0.071 0.997 0.319
consc_t1 ~1 4.370 4.314 4.426 9.388 153.707 0.000
d_consc_1 ~~ d_consc_1 0.112 0.059 0.166 1.000 4.121 0.000
consc_t1 ~~ d_consc_1 -0.073 -0.114 -0.031 -0.465 -3.405 0.001
d_consc_1 ~~ sb06_01_t1 0.011 -0.036 0.057 0.032 0.444 0.657
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.002 0.998

Correlation of general change goal with conscientiousness change score (ideal personality) is not significantly different from zero, r = 0.032, p = 0.657.

6.4.1.11 Conscientiousness - current personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp4 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp4 <- lavaan(mi_lcs_consc_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6156.317 6254.019 0.934 0.115 0.205
# parameters of interest
params_lcs_consc_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.051 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.520 NA NA
d_consc_1 ~1 0.124 0.075 0.173 0.338 4.970 0.000
consc_t1 ~1 3.552 3.468 3.635 4.795 83.301 0.000
d_consc_1 ~~ d_consc_1 0.135 0.088 0.182 1.000 5.617 0.000
consc_t1 ~~ d_consc_1 -0.093 -0.141 -0.046 -0.343 -3.830 0.000
goals ~~ d_consc_1 -0.019 -0.064 0.026 -0.068 -0.832 0.405
goals ~~ goals 0.589 0.451 0.727 1.000 8.341 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (current personality) is not significantly different from zero, r = -0.068, p = 0.405.

6.4.1.12 Conscientiousness - ideal personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp4 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sb07_07_t1 + sb07_08_t1 + sb07_09_t1 # latent change goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_07_t1 ~~ sb07_07_t1
sb07_08_t1 ~~ sb07_08_t1
sb07_09_t1 ~~ sb07_09_t1

sb07_07_t1 ~ 1
sb07_08_t1 ~ 1
sb07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp4 <- lavaan(mi_lcs_consc_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 5499.955 5597.657 1 0 0.024
# parameters of interest
params_lcs_consc_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.085 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.781 NA NA
d_consc_1 ~1 0.024 -0.023 0.071 0.071 0.996 0.319
consc_t1 ~1 4.370 4.314 4.426 9.389 153.709 0.000
d_consc_1 ~~ d_consc_1 0.112 0.059 0.166 1.000 4.121 0.000
consc_t1 ~~ d_consc_1 -0.072 -0.114 -0.031 -0.465 -3.402 0.001
goals ~~ d_consc_1 -0.006 -0.041 0.029 -0.024 -0.343 0.732
goals ~~ goals 0.589 0.450 0.727 1.000 8.349 0.000

Correlation of specific, facet-level change goals with conscientiousness change score (ideal personality) is not significantly different from zero, r = -0.024, p = 0.732.

6.4.1.13 Neuroticism - current personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp4 <- lavaan(mi_lcs_neuro_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4923.234 4993.58 0.984 0.067 0.09
# parameters of interest
params_lcs_neuro_curr_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.018 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.617 NA NA
d_neuro_1 ~1 -0.211 -0.272 -0.150 -0.433 -6.735 0.000
neuro_t1 ~1 3.491 3.399 3.582 4.350 74.590 0.000
d_neuro_1 ~~ d_neuro_1 0.237 0.166 0.308 1.000 6.522 0.000
neuro_t1 ~~ d_neuro_1 -0.130 -0.184 -0.075 -0.332 -4.655 0.000
d_neuro_1 ~~ sb06_01_t1 -0.045 -0.103 0.013 -0.092 -1.514 0.130
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.018 0.985

Correlation of general change goal with neuroticism change score (current personality) is not significantly different from zero, r = -0.092, p = 0.13.

6.4.1.14 Neuroticism - ideal personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp4 <- lavaan(mi_lcs_neuro_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 3949.493 4019.838 0.991 0.037 0.037
# parameters of interest
params_lcs_neuro_ideal_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.050 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.775 NA NA
d_neuro_1 ~1 -0.042 -0.086 0.002 -0.127 -1.866 0.062
neuro_t1 ~1 1.657 1.601 1.713 3.724 58.132 0.000
d_neuro_1 ~~ d_neuro_1 0.108 0.068 0.148 1.000 5.269 0.000
neuro_t1 ~~ d_neuro_1 -0.063 -0.096 -0.031 -0.432 -3.791 0.000
d_neuro_1 ~~ sb06_01_t1 -0.029 -0.075 0.016 -0.090 -1.267 0.205
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.194 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.017 0.986

Correlation of general change goal with neuroticism change score (ideal personality) is not significantly different from zero, r = -0.09, p = 0.205.

6.4.1.15 Neuroticism - current personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp4 <- lavaan(mi_lcs_neuro_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6661.904 6759.606 0.929 0.12 0.207
# parameters of interest
params_lcs_neuro_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.087 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.706 NA NA
d_neuro_1 ~1 -0.209 -0.270 -0.147 -0.402 -6.680 0.00
neuro_t1 ~1 3.490 3.399 3.582 4.368 74.608 0.00
d_neuro_1 ~~ d_neuro_1 0.269 0.180 0.358 1.000 5.926 0.00
neuro_t1 ~~ d_neuro_1 -0.184 -0.254 -0.113 -0.443 -5.124 0.00
goals ~~ d_neuro_1 0.080 0.020 0.141 0.213 2.591 0.01
goals ~~ goals 0.530 0.387 0.673 1.000 7.264 0.00

The correlation of specific, facet-level change goals with neuroticism change score (current personality) is significantly different from zero, r = 0.213, p = 0.01.

6.4.1.16 Neuroticism - ideal personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp4 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sb07_10_t1 + sb07_11_t1 + sb07_12_t1 # latent change goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_10_t1 ~~ sb07_10_t1
sb07_11_t1 ~~ sb07_11_t1
sb07_12_t1 ~~ sb07_12_t1

sb07_10_t1 ~ 1
sb07_11_t1 ~ 1
sb07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp4 <- lavaan(mi_lcs_neuro_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 5696.583 5794.285 0.987 0.039 0.031
# parameters of interest
params_lcs_neuro_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.048 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.773 NA NA
d_neuro_1 ~1 -0.042 -0.086 0.002 -0.127 -1.862 0.063
neuro_t1 ~1 1.657 1.601 1.713 3.730 58.144 0.000
d_neuro_1 ~~ d_neuro_1 0.107 0.068 0.147 1.000 5.302 0.000
neuro_t1 ~~ d_neuro_1 -0.062 -0.095 -0.030 -0.429 -3.776 0.000
goals ~~ d_neuro_1 0.001 -0.030 0.032 0.006 0.083 0.934
goals ~~ goals 0.537 0.394 0.680 1.000 7.363 0.000

Correlation of specific, facet-level change goals with neuroticism change score (ideal personality) is not significantly different from zero, r = 0.006, p = 0.934.

6.4.1.17 Openness - current personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp4 <- lavaan(mi_lcs_openn_curr_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4538.917 4609.263 0.994 0.034 0.022
# parameters of interest
params_lcs_openn_curr_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.912 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.410 NA NA
d_openn_1 ~1 0.057 0.021 0.093 0.292 3.139 0.002
openn_t1 ~1 3.435 3.367 3.503 7.894 98.490 0.000
d_openn_1 ~~ d_openn_1 0.038 0.018 0.059 1.000 3.615 0.000
openn_t1 ~~ d_openn_1 0.000 -0.016 0.015 -0.001 -0.009 0.993
d_openn_1 ~~ sb06_01_t1 -0.013 -0.049 0.023 -0.068 -0.717 0.474
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.188 0.000
sb06_01_t1 ~1 -0.001 -0.104 0.103 -0.001 -0.010 0.992

Correlation of general change goal with openness change score (current personality) is not significantly different from zero, r = -0.068, p = 0.474.

6.4.1.18 Openness - ideal personality: general change goals

Fit model:

Show the code
# adding correlation with manifest change goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp4 <- lavaan(mi_lcs_openn_ideal_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 18 4529.489 4599.834 0.996 0.022 0.041
# parameters of interest
params_lcs_openn_ideal_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.012 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.644 NA NA
d_openn_1 ~1 0.003 -0.037 0.043 0.013 0.157 0.875
openn_t1 ~1 3.739 3.676 3.801 9.491 117.327 0.000
d_openn_1 ~~ d_openn_1 0.063 0.026 0.099 1.000 3.350 0.001
openn_t1 ~~ d_openn_1 -0.033 -0.060 -0.006 -0.337 -2.425 0.015
d_openn_1 ~~ sb06_01_t1 -0.014 -0.060 0.031 -0.058 -0.622 0.534
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.200 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.003 0.998

Correlation of general change goal with openness change score (ideal personality) is not significantly different from zero, r = -0.058, p = 0.534.

6.4.1.19 Openness - current personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp4 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp4 <- lavaan(mi_lcs_openn_curr_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6207.848 6305.55 0.96 0.075 0.107
# parameters of interest
params_lcs_openn_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.899 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.400 NA NA
d_openn_1 ~1 0.057 0.022 0.093 0.298 3.177 0.001
openn_t1 ~1 3.435 3.367 3.503 7.931 98.528 0.000
d_openn_1 ~~ d_openn_1 0.037 0.017 0.057 1.000 3.581 0.000
openn_t1 ~~ d_openn_1 0.004 -0.012 0.019 0.046 0.478 0.633
goals ~~ d_openn_1 0.021 0.003 0.039 0.225 2.242 0.025
goals ~~ goals 0.232 0.132 0.333 1.000 4.541 0.000

The correlation of specific, facet-level change goals with openness change score (current personality) is significantly different from zero, r = 0.225, p = 0.025.

6.4.1.20 Openness - ideal personality: specific, facet-level change goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) change goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp4 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sb07_13_t1 + sb07_14_t1 + sb07_15_t1 # latent change goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) change goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) change goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) change goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb07_13_t1 ~~ sb07_13_t1
sb07_14_t1 ~~ sb07_14_t1
sb07_15_t1 ~~ sb07_15_t1

sb07_13_t1 ~ 1
sb07_14_t1 ~ 1
sb07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp4 <- lavaan(mi_lcs_openn_ideal_specif_hyp4, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_ideal_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 25 6201.037 6298.739 0.99 0.031 0.047
# parameters of interest
params_lcs_openn_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.017 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.649 NA NA
d_openn_1 ~1 0.004 -0.036 0.044 0.015 0.180 0.857
openn_t1 ~1 3.739 3.676 3.801 9.452 117.348 0.000
d_openn_1 ~~ d_openn_1 0.064 0.027 0.101 1.000 3.405 0.001
openn_t1 ~~ d_openn_1 -0.034 -0.060 -0.009 -0.345 -2.611 0.009
goals ~~ d_openn_1 0.016 -0.007 0.038 0.129 1.386 0.166
goals ~~ goals 0.233 0.133 0.333 1.000 4.570 0.000

Correlation of specific, facet-level change goals with openness change score (ideal personality) is not significantly different from zero, r = 0.129, p = 0.166.

6.4.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with change goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sb06_01_t1 & sb07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sb06_01_t1"
      } else{
        goal_op = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp4")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp4")), facet_model_fit))
      }
    }
  }
}  
6.4.2.1 Sociability - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8687.705 8773.682 0.944 0.078 0.061
# parameters of interest
params_lcs_socia_curr_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.017 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.633 NA NA
d_socia_1 ~1 0.180 0.094 0.267 0.345 4.095 0.000
socia_t1 ~1 2.805 2.681 2.929 3.344 44.338 0.000
d_socia_1 ~~ d_socia_1 0.273 0.163 0.383 1.000 4.861 0.000
socia_t1 ~~ d_socia_1 -0.148 -0.227 -0.068 -0.337 -3.637 0.000
d_socia_1 ~~ sb06_01_t1 0.088 0.008 0.169 0.170 2.159 0.031
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.190 0.000
sb06_01_t1 ~1 0.002 -0.102 0.106 0.002 0.035 0.972

The correlation of the general change goal with the sociability change score (current personality) is significantly different from zero, r = 0.17, p = 0.031.

6.4.2.2 Sociability - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8447.027 8533.005 0.972 0.041 0.05
# parameters of interest
params_lcs_socia_ideal_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.968 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.495 NA NA
d_socia_1 ~1 -0.035 -0.088 0.017 -0.151 -1.315 0.188
socia_t1 ~1 4.186 4.105 4.266 9.094 102.508 0.000
d_socia_1 ~~ d_socia_1 0.055 0.001 0.110 1.000 1.985 0.047
socia_t1 ~~ d_socia_1 -0.021 -0.053 0.012 -0.189 -1.254 0.210
d_socia_1 ~~ sb06_01_t1 0.048 -0.006 0.102 0.203 1.727 0.084
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 -0.001 -0.104 0.103 -0.001 -0.010 0.992

Correlation of general change goal with sociability change score (ideal personality) is not significantly different from zero, r = 0.203, p = 0.084.

6.4.2.3 Sociability - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8692.794 8778.772 0.904 0.104 0.116
# parameters of interest
params_lcs_socia_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.044 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.667 NA NA
d_socia_1 ~1 0.178 0.092 0.264 0.334 4.058 0.000
socia_t1 ~1 2.806 2.682 2.930 3.367 44.398 0.000
d_socia_1 ~~ d_socia_1 0.284 0.168 0.400 1.000 4.792 0.000
socia_t1 ~~ d_socia_1 -0.170 -0.257 -0.083 -0.383 -3.836 0.000
d_socia_1 ~~ sb07_01_t1 -0.038 -0.114 0.038 -0.071 -0.970 0.332
sb07_01_t1 ~~ sb07_01_t1 0.997 0.866 1.128 1.000 14.932 0.000

Correlation of specific, facet-level change goals with sociability change score (current personality) is not significantly different from zero, r = -0.071, p = 0.332.

6.4.2.4 Sociability - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8445.859 8531.837 0.948 0.057 0.07
# parameters of interest
params_lcs_socia_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", # change goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.981 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.518 NA NA
d_socia_1 ~1 -0.037 -0.090 0.015 -0.154 -1.388 0.165
socia_t1 ~1 4.186 4.106 4.266 9.134 102.513 0.000
d_socia_1 ~~ d_socia_1 0.059 0.003 0.114 1.000 2.072 0.038
socia_t1 ~~ d_socia_1 -0.025 -0.058 0.008 -0.226 -1.479 0.139
d_socia_1 ~~ sb07_01_t1 0.056 0.004 0.108 0.231 2.111 0.035
sb07_01_t1 ~~ sb07_01_t1 0.997 0.866 1.128 1.000 14.929 0.000

The correlation of specific, facet-level change goals with the anxiety change score (ideal personality) is (barely) significantly different from zero, r = 0.231, p = 0.035.

6.4.2.5 Assertiveness - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9004.937 9090.915 0.983 0.035 0.052
# parameters of interest
params_lcs_asser_curr_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.987 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.416 NA NA
d_asser_1 ~1 0.056 0.003 0.108 0.232 2.072 0.038
asser_t1 ~1 3.059 2.958 3.161 5.366 59.026 0.000
d_asser_1 ~~ d_asser_1 0.058 0.008 0.107 1.000 2.271 0.023
asser_t1 ~~ d_asser_1 -0.025 -0.061 0.012 -0.180 -1.313 0.189
d_asser_1 ~~ sb06_01_t1 0.035 -0.025 0.094 0.144 1.136 0.256
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.015 0.988

Correlation of general change goal with assertiveness change score (current personality) is not significantly different from zero, r = 0.144, p = 0.256.

6.4.2.6 Assertiveness - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8827.414 8913.392 1 0 0.036
# parameters of interest
params_lcs_asser_ideal_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.931 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.634 NA NA
d_asser_1 ~1 -0.033 -0.071 0.005 -0.158 -1.706 0.088
asser_t1 ~1 4.068 3.983 4.153 13.263 93.642 0.000
d_asser_1 ~~ d_asser_1 0.044 0.004 0.084 1.000 2.140 0.032
asser_t1 ~~ d_asser_1 -0.015 -0.035 0.006 -0.228 -1.411 0.158
d_asser_1 ~~ sb06_01_t1 0.050 0.009 0.091 0.241 2.400 0.016
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.191 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.004 0.997

Correlation of general change goal with assertiveness change score (ideal personality) is significantly different from zero, r = 0.241, p = 0.016.

6.4.2.7 Assertiveness - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9006.713 9092.691 0.959 0.055 0.07
# parameters of interest
params_lcs_asser_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.990 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.420 NA NA
d_asser_1 ~1 0.056 0.003 0.109 0.230 2.066 0.039
asser_t1 ~1 3.059 2.958 3.161 5.357 59.032 0.000
d_asser_1 ~~ d_asser_1 0.059 0.008 0.109 1.000 2.281 0.023
asser_t1 ~~ d_asser_1 -0.026 -0.064 0.012 -0.188 -1.358 0.174
d_asser_1 ~~ sb07_02_t1 0.011 -0.040 0.063 0.046 0.428 0.668
sb07_02_t1 ~~ sb07_02_t1 0.997 0.872 1.122 1.000 15.655 0.000

Correlation of specific, facet-level change goals with assertiveness change score (current personality) is not significantly different from zero, r = 0.046, p = 0.668.

6.4.2.8 Assertiveness - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8835.149 8921.127 0.942 0.049 0.066
# parameters of interest
params_lcs_asser_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", # change goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.931 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.635 NA NA
d_asser_1 ~1 -0.033 -0.072 0.005 -0.158 -1.699 0.089
asser_t1 ~1 4.068 3.983 4.153 13.163 93.681 0.000
d_asser_1 ~~ d_asser_1 0.044 0.004 0.085 1.000 2.135 0.033
asser_t1 ~~ d_asser_1 -0.015 -0.036 0.006 -0.229 -1.380 0.168
d_asser_1 ~~ sb07_02_t1 0.013 -0.023 0.049 0.061 0.692 0.489
sb07_02_t1 ~~ sb07_02_t1 0.997 0.872 1.122 1.000 15.655 0.000

Correlation of specific, facet-level change goals with assertiveness change score (ideal personality) is not significantly different from zero, r = 0.061, p = 0.489.

6.4.2.9 Energy - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8992.069 9078.047 0.945 0.065 0.073
# parameters of interest
params_lcs_energ_curr_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.986 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.541 NA NA
d_energ_1 ~1 0.091 0.046 0.137 0.423 3.958 0.000
energ_t1 ~1 3.291 3.191 3.390 8.364 64.840 0.000
d_energ_1 ~~ d_energ_1 0.047 0.010 0.083 1.000 2.488 0.013
energ_t1 ~~ d_energ_1 -0.021 -0.043 0.001 -0.248 -1.891 0.059
d_energ_1 ~~ sb06_01_t1 0.018 -0.020 0.056 0.084 0.933 0.351
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.001 -0.103 0.104 0.001 0.010 0.992

Correlation of general change goal with energy change score (current personality) is not significantly different from zero, r = 0.084, p = 0.351.

6.4.2.10 Energy - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8383.425 8469.403 0.949 0.044 0.047
# parameters of interest
params_lcs_energ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.944 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.682 NA NA
d_energ_1 ~1 -0.015 -0.062 0.031 -0.060 -0.649 0.516
energ_t1 ~1 3.744 3.637 3.852 10.414 68.136 0.000
d_energ_1 ~~ d_energ_1 0.067 0.004 0.131 1.000 2.088 0.037
energ_t1 ~~ d_energ_1 -0.026 -0.066 0.015 -0.276 -1.247 0.213
d_energ_1 ~~ sb06_01_t1 0.036 -0.013 0.086 0.140 1.440 0.150
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.195 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.018 0.985

Correlation of general change goal with energy change score (ideal personality) is not significantly different from zero, r = 0.14, p = 0.15.

6.4.2.11 Energy - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8991.903 9077.881 0.903 0.088 0.094
# parameters of interest
params_lcs_energ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.010 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.572 NA NA
d_energ_1 ~1 0.091 0.046 0.136 0.410 3.942 0.000
energ_t1 ~1 3.291 3.191 3.391 8.388 64.799 0.000
d_energ_1 ~~ d_energ_1 0.049 0.011 0.088 1.000 2.491 0.013
energ_t1 ~~ d_energ_1 -0.026 -0.051 -0.002 -0.300 -2.102 0.036
d_energ_1 ~~ sb07_03_t1 -0.020 -0.056 0.015 -0.092 -1.127 0.260
sb07_03_t1 ~~ sb07_03_t1 0.997 0.860 1.134 1.000 14.279 0.000

Correlation of specific, facet-level change goals with energy change score (current personality) is not significantly different from zero, r = -0.092, p = 0.26.

6.4.2.12 Energy - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8385.347 8471.325 0.934 0.05 0.058
# parameters of interest
params_lcs_energ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", # change goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.937 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.669 NA NA
d_energ_1 ~1 -0.016 -0.063 0.031 -0.061 -0.651 0.515
energ_t1 ~1 3.744 3.637 3.852 10.379 68.132 0.000
d_energ_1 ~~ d_energ_1 0.066 0.004 0.129 1.000 2.075 0.038
energ_t1 ~~ d_energ_1 -0.024 -0.064 0.016 -0.259 -1.176 0.239
d_energ_1 ~~ sb07_03_t1 -0.020 -0.069 0.028 -0.079 -0.818 0.413
sb07_03_t1 ~~ sb07_03_t1 0.997 0.860 1.134 1.000 14.278 0.000

Correlation of specific, facet-level change goals with energy change score (ideal personality) is not significantly different from zero, r = -0.079, p = 0.413.

6.4.2.13 Compassion - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8705.027 8791.005 0.991 0.022 0.037
# parameters of interest
params_lcs_compa_curr_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.141 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.407 NA NA
d_compa_1 ~1 0.105 0.037 0.172 0.410 3.047 0.002
compa_t1 ~1 4.148 4.058 4.239 5.779 89.697 0.000
d_compa_1 ~~ d_compa_1 0.065 -0.014 0.144 1.000 1.622 0.105
compa_t1 ~~ d_compa_1 -0.093 -0.169 -0.016 -0.504 -2.371 0.018
d_compa_1 ~~ sb06_01_t1 0.038 -0.016 0.091 0.148 1.390 0.165
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.103 0.104 0.000 0.005 0.996

Correlation of general change goal with compassion change score (current personality) is not significantly different from zero, r = 0.148, p = 0.165.

6.4.2.14 Compassion - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9119.675 9205.653 0.988 0.021 0.042
# parameters of interest
params_lcs_compa_ideal_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.085 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.743 NA NA
d_compa_1 ~1 0.015 -0.067 0.098 0.033 0.368 0.713
compa_t1 ~1 4.181 4.086 4.275 6.066 86.683 0.000
d_compa_1 ~~ d_compa_1 0.223 0.090 0.355 1.000 3.281 0.001
compa_t1 ~~ d_compa_1 -0.147 -0.252 -0.043 -0.453 -2.763 0.006
d_compa_1 ~~ sb06_01_t1 0.025 -0.058 0.107 0.052 0.580 0.562
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.005 0.996

Correlation of general change goal with compassion change score (ideal personality) is not significantly different from zero, r = 0.052, p = 0.562.

6.4.2.15 Compassion - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8706.7 8792.677 0.977 0.036 0.056
# parameters of interest
params_lcs_compa_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.140 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.403 NA NA
d_compa_1 ~1 0.104 0.037 0.171 0.414 3.052 0.002
compa_t1 ~1 4.149 4.058 4.239 5.823 89.775 0.000
d_compa_1 ~~ d_compa_1 0.063 -0.015 0.141 1.000 1.594 0.111
compa_t1 ~~ d_compa_1 -0.090 -0.166 -0.014 -0.503 -2.324 0.020
d_compa_1 ~~ sb07_04_t1 -0.003 -0.064 0.058 -0.012 -0.095 0.924
sb07_04_t1 ~~ sb07_04_t1 0.997 0.904 1.090 1.000 21.048 0.000

Correlation of specific, facet-level change goals with compassion change score (current personality) is not significantly different from zero, r = -0.012, p = 0.924.

6.4.2.16 Compassion - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9119.687 9205.665 0.978 0.029 0.048
# parameters of interest
params_lcs_compa_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", # change goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.088 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.747 NA NA
d_compa_1 ~1 0.016 -0.066 0.098 0.033 0.376 0.707
compa_t1 ~1 4.181 4.086 4.275 6.064 86.676 0.000
d_compa_1 ~~ d_compa_1 0.224 0.093 0.356 1.000 3.342 0.001
compa_t1 ~~ d_compa_1 -0.149 -0.252 -0.046 -0.456 -2.833 0.005
d_compa_1 ~~ sb07_04_t1 -0.024 -0.105 0.057 -0.051 -0.588 0.556
sb07_04_t1 ~~ sb07_04_t1 0.997 0.904 1.090 1.000 21.048 0.000

Correlation of specific, facet-level change goals with compassion change score (ideal personality) is not significantly different from zero, r = -0.051, p = 0.556.

6.4.2.17 Respectfulness - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7963.186 8049.164 0.942 0.067 0.057
# parameters of interest
params_lcs_respe_curr_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.129 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.634 NA NA
d_respe_1 ~1 0.065 0.010 0.120 0.198 2.328 0.020
respe_t1 ~1 4.398 4.321 4.475 7.514 111.747 0.000
d_respe_1 ~~ d_respe_1 0.108 0.054 0.162 1.000 3.899 0.000
respe_t1 ~~ d_respe_1 -0.091 -0.149 -0.033 -0.472 -3.063 0.002
d_respe_1 ~~ sb06_01_t1 -0.035 -0.087 0.016 -0.108 -1.351 0.177
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.194 0.000
sb06_01_t1 ~1 -0.001 -0.104 0.103 -0.001 -0.010 0.992

Correlation of general change goal with respectfulness change score (current personality) is not significantly different from zero, r = -0.108, p = 0.177.

6.4.2.18 Respectfulness - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7430.46 7516.437 0.908 0.069 0.065
# parameters of interest
params_lcs_respe_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.243 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.820 NA NA
d_respe_1 ~1 0.041 -0.013 0.095 0.135 1.493 0.135
respe_t1 ~1 4.618 4.551 4.686 10.049 134.737 0.000
d_respe_1 ~~ d_respe_1 0.092 0.008 0.176 1.000 2.144 0.032
respe_t1 ~~ d_respe_1 -0.083 -0.158 -0.008 -0.597 -2.178 0.029
d_respe_1 ~~ sb06_01_t1 0.008 -0.036 0.051 0.025 0.341 0.733
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.004 0.997

Correlation of general change goal with respectfulness change score (ideal personality) is not significantly different from zero, r = 0.025, p = 0.733.

6.4.2.19 Respectfulness - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7965.142 8051.12 0.891 0.094 0.104
# parameters of interest
params_lcs_respe_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.122 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.623 NA NA
d_respe_1 ~1 0.065 0.011 0.120 0.201 2.340 0.019
respe_t1 ~1 4.398 4.321 4.475 7.513 111.719 0.000
d_respe_1 ~~ d_respe_1 0.106 0.051 0.160 1.000 3.809 0.000
respe_t1 ~~ d_respe_1 -0.088 -0.148 -0.028 -0.463 -2.889 0.004
d_respe_1 ~~ sb07_05_t1 0.009 -0.046 0.063 0.026 0.304 0.761
sb07_05_t1 ~~ sb07_05_t1 0.997 0.884 1.110 1.000 17.341 0.000

Correlation of specific, facet-level change goals with respectfulness change score (current personality) is not significantly different from zero, r = 0.026, p = 0.761.

6.4.2.20 Respectfulness - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7426.705 7512.683 0.901 0.072 0.067
# parameters of interest
params_lcs_respe_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", # change goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.249 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.833 NA NA
d_respe_1 ~1 0.041 -0.012 0.094 0.134 1.508 0.132
respe_t1 ~1 4.618 4.551 4.686 10.080 134.848 0.000
d_respe_1 ~~ d_respe_1 0.093 0.008 0.178 1.000 2.154 0.031
respe_t1 ~~ d_respe_1 -0.084 -0.160 -0.009 -0.603 -2.195 0.028
d_respe_1 ~~ sb07_05_t1 -0.042 -0.084 0.000 -0.138 -1.971 0.049
sb07_05_t1 ~~ sb07_05_t1 0.997 0.884 1.110 1.000 17.341 0.000

The correlation of specific, facet-level change goals with the respectfulness change score (ideal personality) is (barely) significantly different from zero, r = -0.138, p = 0.049.

6.4.2.21 Trust - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9072.392 9158.37 0.959 0.053 0.041
# parameters of interest
params_lcs_trust_curr_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.026 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.559 NA NA
d_trust_1 ~1 0.111 0.040 0.181 0.341 3.086 0.002
trust_t1 ~1 3.124 3.012 3.236 5.256 54.598 0.000
d_trust_1 ~~ d_trust_1 0.105 0.014 0.196 1.000 2.269 0.023
trust_t1 ~~ d_trust_1 -0.061 -0.122 -0.001 -0.318 -1.976 0.048
d_trust_1 ~~ sb06_01_t1 0.007 -0.054 0.067 0.020 0.213 0.832
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.003 0.998

Correlation of general change goal with trust change score (current personality) is not significantly different from zero, r = 0.02, p = 0.832.

6.4.2.22 Trust - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8688.91 8774.887 0.972 0.038 0.043
# parameters of interest
params_lcs_trust_ideal_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.996 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.611 NA NA
d_trust_1 ~1 0.020 -0.026 0.067 0.082 0.852 0.394
trust_t1 ~1 4.038 3.951 4.126 9.998 90.381 0.000
d_trust_1 ~~ d_trust_1 0.061 0.010 0.113 1.000 2.337 0.019
trust_t1 ~~ d_trust_1 -0.030 -0.064 0.004 -0.301 -1.755 0.079
d_trust_1 ~~ sb06_01_t1 0.017 -0.030 0.063 0.067 0.697 0.486
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.003 0.998

Correlation of general change goal with trust change score (ideal personality) is not significantly different from zero, r = 0.067, p = 0.486.

6.4.2.23 Trust - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9072.44 9158.418 0.954 0.056 0.048
# parameters of interest
params_lcs_trust_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.558 NA NA
d_trust_1 ~1 0.111 0.040 0.181 0.342 3.076 0.002
trust_t1 ~1 3.124 3.012 3.236 5.251 54.614 0.000
d_trust_1 ~~ d_trust_1 0.105 0.014 0.195 1.000 2.269 0.023
trust_t1 ~~ d_trust_1 -0.061 -0.122 0.000 -0.317 -1.975 0.048
d_trust_1 ~~ sb07_06_t1 0.002 -0.057 0.061 0.007 0.071 0.944
sb07_06_t1 ~~ sb07_06_t1 0.997 0.906 1.089 1.000 21.383 0.000

Correlation of specific, facet-level change goals with trust change score (current personality) is not significantly different from zero, r = 0.007, p = 0.944.

6.4.2.24 Trust - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8689.135 8775.113 0.959 0.045 0.05
# parameters of interest
params_lcs_trust_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", # change goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.990 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.602 NA NA
d_trust_1 ~1 0.020 -0.026 0.066 0.082 0.849 0.396
trust_t1 ~1 4.039 3.951 4.126 10.040 90.402 0.000
d_trust_1 ~~ d_trust_1 0.060 0.009 0.111 1.000 2.305 0.021
trust_t1 ~~ d_trust_1 -0.028 -0.062 0.005 -0.288 -1.648 0.099
d_trust_1 ~~ sb07_06_t1 -0.013 -0.059 0.032 -0.055 -0.573 0.566
sb07_06_t1 ~~ sb07_06_t1 0.997 0.906 1.089 1.000 21.379 0.000

Correlation of specific, facet-level change goals with trust change score (ideal personality) is not significantly different from zero, r = -0.055, p = 0.566.

6.4.2.25 Organization - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8623.147 8709.125 0.977 0.054 0.046
# parameters of interest
params_lcs_organ_curr_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.070 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.535 NA NA
d_organ_1 ~1 0.138 0.059 0.217 0.269 3.444 0.001
organ_t1 ~1 3.135 3.000 3.271 3.050 45.306 0.000
d_organ_1 ~~ d_organ_1 0.264 0.149 0.378 1.000 4.507 0.000
organ_t1 ~~ d_organ_1 -0.199 -0.292 -0.106 -0.377 -4.183 0.000
d_organ_1 ~~ sb06_01_t1 0.075 -0.006 0.155 0.145 1.822 0.068
sb06_01_t1 ~~ sb06_01_t1 0.998 0.860 1.135 1.000 14.188 0.000
sb06_01_t1 ~1 0.001 -0.103 0.104 0.001 0.012 0.990

Correlation of general change goal with organization change score (current personality) is not significantly different from zero, r = 0.145, p = 0.068.

6.4.2.26 Organization - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7600.129 7686.107 0.907 0.059 0.064
# parameters of interest
params_lcs_organ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.053 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.797 NA NA
d_organ_1 ~1 0.043 -0.020 0.106 0.127 1.325 0.185
organ_t1 ~1 4.289 4.190 4.387 9.659 85.319 0.000
d_organ_1 ~~ d_organ_1 0.113 0.042 0.184 1.000 3.117 0.002
organ_t1 ~~ d_organ_1 -0.066 -0.120 -0.012 -0.443 -2.416 0.016
d_organ_1 ~~ sb06_01_t1 0.016 -0.038 0.070 0.047 0.577 0.564
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.004 0.997

Correlation of general change goal with organization change score (ideal personality) is not significantly different from zero, r = 0.047, p = 0.564.

6.4.2.27 Organization - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8624.638 8710.616 0.874 0.132 0.151
# parameters of interest
params_lcs_organ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.112 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.586 NA NA
d_organ_1 ~1 0.140 0.061 0.218 0.258 3.480 0.001
organ_t1 ~1 3.135 3.000 3.271 3.058 45.319 0.000
d_organ_1 ~~ d_organ_1 0.292 0.161 0.423 1.000 4.370 0.000
organ_t1 ~~ d_organ_1 -0.247 -0.364 -0.130 -0.445 -4.148 0.000
d_organ_1 ~~ sb07_07_t1 -0.070 -0.162 0.022 -0.130 -1.492 0.136
sb07_07_t1 ~~ sb07_07_t1 0.998 0.905 1.091 1.000 21.025 0.000

Correlation of specific, facet-level change goals with organization change score (current personality) is not significantly different from zero, r = -0.13, p = 0.136.

6.4.2.28 Organization - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7598.643 7684.621 0.924 0.053 0.062
# parameters of interest
params_lcs_organ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", # change goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.052 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.800 NA NA
d_organ_1 ~1 0.042 -0.021 0.104 0.125 1.304 0.192
organ_t1 ~1 4.289 4.191 4.388 9.773 85.503 0.000
d_organ_1 ~~ d_organ_1 0.112 0.042 0.182 1.000 3.123 0.002
organ_t1 ~~ d_organ_1 -0.065 -0.118 -0.012 -0.443 -2.404 0.016
d_organ_1 ~~ sb07_07_t1 -0.034 -0.087 0.019 -0.102 -1.256 0.209
sb07_07_t1 ~~ sb07_07_t1 0.997 0.904 1.090 1.000 21.052 0.000

Correlation of specific, facet-level change goals with organization change score (ideal personality) is not significantly different from zero, r = -0.102, p = 0.209.

6.4.2.29 Productiveness - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8564.6 8650.578 0.962 0.06 0.063
# parameters of interest
params_lcs_produ_curr_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.054 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.517 NA NA
d_produ_1 ~1 0.152 0.085 0.219 0.405 4.459 0.000
produ_t1 ~1 2.623 2.502 2.743 3.418 42.694 0.000
d_produ_1 ~~ d_produ_1 0.142 0.072 0.212 1.000 3.954 0.000
produ_t1 ~~ d_produ_1 -0.100 -0.165 -0.035 -0.346 -3.029 0.002
d_produ_1 ~~ sb06_01_t1 -0.023 -0.085 0.038 -0.062 -0.739 0.460
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.191 0.000
sb06_01_t1 ~1 -0.001 -0.104 0.103 -0.001 -0.014 0.989

Correlation of general change goal with productiveness change score (current personality) is not significantly different from zero, r = -0.062, p = 0.46.

6.4.2.30 Productiveness - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7128.7 7214.678 0.924 0.058 0.056
# parameters of interest
params_lcs_produ_ideal_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.205 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.878 NA NA
d_produ_1 ~1 0.022 -0.031 0.074 0.067 0.808 0.419
produ_t1 ~1 4.365 4.284 4.446 9.874 105.536 0.000
d_produ_1 ~~ d_produ_1 0.104 0.029 0.179 1.000 2.709 0.007
produ_t1 ~~ d_produ_1 -0.082 -0.136 -0.029 -0.578 -3.028 0.002
d_produ_1 ~~ sb06_01_t1 -0.010 -0.058 0.039 -0.030 -0.381 0.703
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.002 0.998

Correlation of general change goal with productiveness change score (ideal personality) is not significantly different from zero, r = -0.03, p = 0.703.

6.4.2.31 Productiveness - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8563.67 8649.648 0.919 0.091 0.117
# parameters of interest
params_lcs_produ_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.070 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.539 NA NA
d_produ_1 ~1 0.152 0.085 0.219 0.395 4.444 0.000
produ_t1 ~1 2.623 2.503 2.744 3.431 42.681 0.000
d_produ_1 ~~ d_produ_1 0.148 0.076 0.221 1.000 3.992 0.000
produ_t1 ~~ d_produ_1 -0.111 -0.181 -0.042 -0.378 -3.149 0.002
d_produ_1 ~~ sb07_08_t1 -0.041 -0.105 0.024 -0.106 -1.233 0.218
sb07_08_t1 ~~ sb07_08_t1 0.997 0.855 1.140 1.000 13.719 0.000

Correlation of specific, facet-level change goals with productiveness change score (current personality) is not significantly different from zero, r = -0.106, p = 0.218.

6.4.2.32 Productiveness - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7128.872 7214.85 0.932 0.055 0.056
# parameters of interest
params_lcs_produ_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", # change goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.205 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.878 NA NA
d_produ_1 ~1 0.022 -0.031 0.074 0.067 0.807 0.420
produ_t1 ~1 4.365 4.284 4.446 9.866 105.536 0.000
d_produ_1 ~~ d_produ_1 0.104 0.029 0.179 1.000 2.715 0.007
produ_t1 ~~ d_produ_1 -0.082 -0.135 -0.029 -0.578 -3.043 0.002
d_produ_1 ~~ sb07_08_t1 -0.003 -0.046 0.040 -0.008 -0.122 0.903
sb07_08_t1 ~~ sb07_08_t1 0.997 0.855 1.140 1.000 13.720 0.000

Correlation of specific, facet-level change goals with productiveness change score (ideal personality) is not significantly different from zero, r = -0.008, p = 0.903.

6.4.2.33 Responsibility - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8694.534 8780.511 0.91 0.082 0.086
# parameters of interest
params_lcs_respo_curr_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.991 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.472 NA NA
d_respo_1 ~1 0.042 -0.004 0.088 0.199 1.775 0.076
respo_t1 ~1 3.623 3.528 3.719 8.224 74.304 0.000
d_respo_1 ~~ d_respo_1 0.044 0.004 0.084 1.000 2.169 0.030
respo_t1 ~~ d_respo_1 -0.020 -0.046 0.005 -0.220 -1.568 0.117
d_respo_1 ~~ sb06_01_t1 -0.038 -0.081 0.004 -0.182 -1.757 0.079
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.017 0.986

Correlation of general change goal with responsibility change score (current personality) is not significantly different from zero, r = -0.182, p = 0.079.

6.4.2.34 Responsibility - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8013.196 8099.174 0.979 0.03 0.041
# parameters of interest
params_lcs_respo_ideal_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.004 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.609 NA NA
d_respo_1 ~1 -0.018 -0.077 0.040 -0.066 -0.614 0.539
respo_t1 ~1 4.231 4.128 4.335 9.211 80.245 0.000
d_respo_1 ~~ d_respo_1 0.078 0.026 0.130 1.000 2.938 0.003
respo_t1 ~~ d_respo_1 -0.040 -0.083 0.003 -0.310 -1.806 0.071
d_respo_1 ~~ sb06_01_t1 0.020 -0.035 0.074 0.070 0.700 0.484
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.190 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.004 0.997

Correlation of general change goal with responsibility change score (ideal personality) is not significantly different from zero, r = 0.07, p = 0.484.

6.4.2.35 Responsibility - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8694.571 8780.549 0.86 0.105 0.118
# parameters of interest
params_lcs_respo_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.013 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.500 NA NA
d_respo_1 ~1 0.042 -0.005 0.088 0.191 1.764 0.078
respo_t1 ~1 3.623 3.528 3.719 8.191 74.281 0.000
d_respo_1 ~~ d_respo_1 0.048 0.006 0.090 1.000 2.217 0.027
respo_t1 ~~ d_respo_1 -0.026 -0.055 0.002 -0.273 -1.811 0.070
d_respo_1 ~~ sb07_09_t1 -0.041 -0.084 0.003 -0.186 -1.826 0.068
sb07_09_t1 ~~ sb07_09_t1 0.997 0.919 1.075 1.000 25.004 0.000

Correlation of specific, facet-level change goals with responsibility change score (current personality) is not significantly different from zero, r = -0.186, p = 0.068.

6.4.2.36 Responsibility - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8013.647 8099.625 0.986 0.025 0.041
# parameters of interest
params_lcs_respo_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", # change goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.004 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.612 NA NA
d_respo_1 ~1 -0.018 -0.077 0.040 -0.066 -0.613 0.540
respo_t1 ~1 4.231 4.128 4.335 9.315 80.295 0.000
d_respo_1 ~~ d_respo_1 0.077 0.026 0.128 1.000 2.939 0.003
respo_t1 ~~ d_respo_1 -0.039 -0.082 0.003 -0.311 -1.803 0.071
d_respo_1 ~~ sb07_09_t1 0.007 -0.046 0.060 0.025 0.252 0.801
sb07_09_t1 ~~ sb07_09_t1 0.997 0.919 1.075 1.000 25.007 0.000

Correlation of specific, facet-level change goals with responsibility change score (ideal personality) is not significantly different from zero, r = 0.025, p = 0.801.

6.4.2.37 Anxiety - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9022.237 9108.215 0.967 0.051 0.062
# parameters of interest
params_lcs_anxie_curr_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.062 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.661 NA NA
d_anxie_1 ~1 -0.217 -0.309 -0.126 -0.382 -4.663 0.000
anxie_t1 ~1 3.158 3.033 3.284 3.458 49.366 0.000
d_anxie_1 ~~ d_anxie_1 0.324 0.150 0.497 1.000 3.658 0.000
anxie_t1 ~~ d_anxie_1 -0.209 -0.326 -0.092 -0.402 -3.496 0.000
d_anxie_1 ~~ sb06_01_t1 -0.071 -0.150 0.008 -0.125 -1.763 0.078
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.191 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.019 0.985

Correlation of general change goal with anxiety change score (current personality) is not significantly different from zero, r = -0.125, p = 0.078.

6.4.2.38 Anxiety - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8714.422 8800.4 1 0 0.043
# parameters of interest
params_lcs_anxie_ideal_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.182 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.861 NA NA
d_anxie_1 ~1 -0.038 -0.080 0.004 -0.169 -1.757 0.079
anxie_t1 ~1 1.447 1.381 1.513 4.689 42.924 0.000
d_anxie_1 ~~ d_anxie_1 0.051 -0.002 0.103 1.000 1.880 0.060
anxie_t1 ~~ d_anxie_1 -0.039 -0.080 0.003 -0.559 -1.825 0.068
d_anxie_1 ~~ sb06_01_t1 -0.003 -0.038 0.031 -0.015 -0.185 0.853
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.001 0.999

Correlation of general change goal with anxiety change score (ideal personality) is not significantly different from zero, r = -0.015, p = 0.853.

6.4.2.39 Anxiety - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9013.84 9099.818 0.864 0.111 0.133
# parameters of interest
params_lcs_anxie_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.152 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.801 NA NA
d_anxie_1 ~1 -0.213 -0.304 -0.122 -0.337 -4.588 0.000
anxie_t1 ~1 3.158 3.032 3.283 3.468 49.398 0.000
d_anxie_1 ~~ d_anxie_1 0.401 0.192 0.610 1.000 3.768 0.000
anxie_t1 ~~ d_anxie_1 -0.303 -0.444 -0.161 -0.525 -4.196 0.000
d_anxie_1 ~~ sb07_10_t1 0.154 0.056 0.253 0.244 3.083 0.002
sb07_10_t1 ~~ sb07_10_t1 0.997 0.898 1.097 1.000 19.605 0.000

The correlation of specific, facet-level change goals with the anxiety change score (current personality) is significantly different from zero, r = 0.244, p = 0.002.

6.4.2.40 Anxiety - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8714.278 8800.256 0.974 0.028 0.049
# parameters of interest
params_lcs_anxie_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", # change goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.180 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.858 NA NA
d_anxie_1 ~1 -0.038 -0.081 0.004 -0.169 -1.754 0.079
anxie_t1 ~1 1.447 1.381 1.513 4.680 42.912 0.000
d_anxie_1 ~~ d_anxie_1 0.051 -0.002 0.103 1.000 1.881 0.060
anxie_t1 ~~ d_anxie_1 -0.039 -0.080 0.003 -0.557 -1.827 0.068
d_anxie_1 ~~ sb07_10_t1 -0.007 -0.037 0.023 -0.031 -0.454 0.650
sb07_10_t1 ~~ sb07_10_t1 0.997 0.898 1.097 1.000 19.605 0.000

Correlation of specific, facet-level change goals with anxiety change score (ideal personality) is not significantly different from zero, r = -0.031, p = 0.65.

6.4.2.41 Depression - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8899.471 8985.449 0.928 0.094 0.097
# parameters of interest
params_lcs_depre_curr_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.968 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.564 NA NA
d_depre_1 ~1 -0.150 -0.212 -0.088 -0.413 -4.750 0.000
depre_t1 ~1 3.036 2.924 3.149 4.880 52.795 0.000
d_depre_1 ~~ d_depre_1 0.132 0.072 0.191 1.000 4.326 0.000
depre_t1 ~~ d_depre_1 -0.053 -0.088 -0.017 -0.233 -2.918 0.004
d_depre_1 ~~ sb06_01_t1 -0.025 -0.076 0.026 -0.068 -0.956 0.339
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.016 0.987

Correlation of general change goal with depression change score (current personality) is not significantly different from zero, r = -0.068, p = 0.339.

6.4.2.42 Depression - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7123.618 7209.596 0.947 0.051 0.052
# parameters of interest
params_lcs_depre_ideal_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.068 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.828 NA NA
d_depre_1 ~1 -0.027 -0.077 0.024 -0.082 -1.041 0.298
depre_t1 ~1 1.592 1.520 1.663 3.800 43.766 0.000
d_depre_1 ~~ d_depre_1 0.105 0.046 0.165 1.000 3.465 0.001
depre_t1 ~~ d_depre_1 -0.064 -0.112 -0.016 -0.468 -2.597 0.009
d_depre_1 ~~ sb06_01_t1 -0.036 -0.085 0.014 -0.110 -1.401 0.161
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.196 0.000
sb06_01_t1 ~1 0.001 -0.103 0.105 0.001 0.015 0.988

Correlation of general change goal with depression change score (ideal personality) is not significantly different from zero, r = -0.11, p = 0.161.

6.4.2.43 Depression - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8888.047 8974.024 0.853 0.141 0.163
# parameters of interest
params_lcs_depre_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.063 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.701 NA NA
d_depre_1 ~1 -0.148 -0.211 -0.086 -0.363 -4.674 0.000
depre_t1 ~1 3.036 2.923 3.149 4.894 52.813 0.000
d_depre_1 ~~ d_depre_1 0.167 0.089 0.245 1.000 4.211 0.000
depre_t1 ~~ d_depre_1 -0.106 -0.160 -0.051 -0.417 -3.812 0.000
d_depre_1 ~~ sb07_11_t1 0.115 0.041 0.189 0.282 3.059 0.002
sb07_11_t1 ~~ sb07_11_t1 0.998 0.918 1.077 1.000 24.587 0.000

The correlation of specific, facet-level change goals with the depression change score (current personality) is significantly different from zero, r = 0.282, p = 0.002.

6.4.2.44 Depression - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 7125.324 7211.302 0.955 0.047 0.049
# parameters of interest
params_lcs_depre_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", # change goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.064 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.819 NA NA
d_depre_1 ~1 -0.026 -0.077 0.024 -0.082 -1.023 0.306
depre_t1 ~1 1.592 1.520 1.663 3.772 43.738 0.000
d_depre_1 ~~ d_depre_1 0.105 0.045 0.166 1.000 3.422 0.001
depre_t1 ~~ d_depre_1 -0.063 -0.112 -0.014 -0.460 -2.534 0.011
d_depre_1 ~~ sb07_11_t1 0.020 -0.020 0.061 0.063 0.978 0.328
sb07_11_t1 ~~ sb07_11_t1 0.997 0.918 1.077 1.000 24.582 0.000

Correlation of specific, facet-level change goals with the depression change score (ideal personality) is not significantly different from zero, r = 0.063, p = 0.328.

6.4.2.45 Volatility - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9012.322 9098.3 0.977 0.049 0.057
# parameters of interest
params_lcs_volat_curr_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.059 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.632 NA NA
d_volat_1 ~1 -0.174 -0.251 -0.097 -0.334 -4.434 0.000
volat_t1 ~1 3.229 3.107 3.351 3.700 51.914 0.000
d_volat_1 ~~ d_volat_1 0.271 0.180 0.362 1.000 5.840 0.000
volat_t1 ~~ d_volat_1 -0.177 -0.248 -0.106 -0.389 -4.888 0.000
d_volat_1 ~~ sb06_01_t1 0.012 -0.065 0.090 0.023 0.308 0.758
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.001 0.999

Correlation of general change goal with volatility change score (current personality) is not significantly different from zero, r = 0.023, p = 0.758.

6.4.2.46 Volatility - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8133.591 8219.568 0.93 0.053 0.056
# parameters of interest
params_lcs_volat_ideal_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.944 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.589 NA NA
d_volat_1 ~1 -0.008 -0.072 0.056 -0.027 -0.253 0.800
volat_t1 ~1 1.709 1.625 1.793 3.514 39.911 0.000
d_volat_1 ~~ d_volat_1 0.092 0.024 0.160 1.000 2.659 0.008
volat_t1 ~~ d_volat_1 -0.032 -0.078 0.015 -0.215 -1.335 0.182
d_volat_1 ~~ sb06_01_t1 -0.068 -0.130 -0.007 -0.226 -2.172 0.030
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.193 0.000
sb06_01_t1 ~1 0.001 -0.102 0.105 0.001 0.027 0.979

Correlation of general change goal with volatility change score (ideal personality) is significantly different from zero, r = -0.226, p = 0.03.

6.4.2.47 Volatility - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 9012.312 9098.29 0.959 0.066 0.085
# parameters of interest
params_lcs_volat_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.061 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.634 NA NA
d_volat_1 ~1 -0.174 -0.251 -0.097 -0.333 -4.439 0.000
volat_t1 ~1 3.229 3.107 3.351 3.699 51.918 0.000
d_volat_1 ~~ d_volat_1 0.272 0.177 0.367 1.000 5.627 0.000
volat_t1 ~~ d_volat_1 -0.179 -0.254 -0.103 -0.392 -4.638 0.000
d_volat_1 ~~ sb07_12_t1 0.013 -0.068 0.094 0.025 0.321 0.748
sb07_12_t1 ~~ sb07_12_t1 0.997 0.896 1.099 1.000 19.222 0.000

Correlation of specific, facet-level change goals with volatility change score (current personality) is not significantly different from zero, r = 0.025, p = 0.748.

6.4.2.48 Volatility - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8139.125 8225.103 0.909 0.061 0.061
# parameters of interest
params_lcs_volat_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", # change goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.942 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.588 NA NA
d_volat_1 ~1 -0.008 -0.072 0.056 -0.026 -0.246 0.806
volat_t1 ~1 1.709 1.625 1.792 3.531 39.958 0.000
d_volat_1 ~~ d_volat_1 0.091 0.024 0.159 1.000 2.645 0.008
volat_t1 ~~ d_volat_1 -0.031 -0.078 0.016 -0.210 -1.276 0.202
d_volat_1 ~~ sb07_12_t1 -0.004 -0.060 0.053 -0.012 -0.123 0.902
sb07_12_t1 ~~ sb07_12_t1 0.997 0.896 1.099 1.000 19.222 0.000

Correlation of specific, facet-level change goals with volatility change score (ideal personality) is not significantly different from zero, r = -0.012, p = 0.902.

6.4.2.49 Curiosity - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8768.367 8854.345 0.974 0.04 0.048
# parameters of interest
params_lcs_curio_curr_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.992 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.411 NA NA
d_curio_1 ~1 0.064 0.012 0.115 0.325 2.417 0.016
curio_t1 ~1 4.062 3.970 4.154 8.620 86.648 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.009 0.085 1.000 1.591 0.112
curio_t1 ~~ d_curio_1 -0.017 -0.048 0.013 -0.187 -1.105 0.269
d_curio_1 ~~ sb06_01_t1 -0.002 -0.054 0.050 -0.009 -0.070 0.944
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.001 0.999

Correlation of general change goal with curiosity change score (current personality) is not significantly different from zero, r = -0.009, p = 0.944.

6.4.2.50 Curiosity - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8796.87 8882.848 0.987 0.022 0.04
# parameters of interest
params_lcs_curio_ideal_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.011 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.069 NA NA
d_curio_1 ~1 0.002 -0.040 0.045 0.094 0.106 0.915
curio_t1 ~1 4.434 4.362 4.506 12.307 120.992 0.000
d_curio_1 ~~ d_curio_1 0.001 -0.036 0.037 1.000 0.032 0.974
curio_t1 ~~ d_curio_1 -0.002 -0.027 0.024 -0.191 -0.129 0.897
d_curio_1 ~~ sb06_01_t1 0.009 -0.037 0.055 0.352 0.368 0.713
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.189 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.003 0.998

Correlation of general change goal with curiosity change score (ideal personality) is not significantly different from zero, r = 0.352, p = 0.713.

6.4.2.51 Curiosity - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8767.478 8853.456 0.95 0.055 0.066
# parameters of interest
params_lcs_curio_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.999 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.424 NA NA
d_curio_1 ~1 0.063 0.011 0.114 0.316 2.384 0.017
curio_t1 ~1 4.062 3.970 4.154 8.706 86.704 0.000
d_curio_1 ~~ d_curio_1 0.039 -0.009 0.087 1.000 1.611 0.107
curio_t1 ~~ d_curio_1 -0.019 -0.051 0.012 -0.210 -1.207 0.227
d_curio_1 ~~ sb07_13_t1 -0.022 -0.078 0.033 -0.114 -0.790 0.429
sb07_13_t1 ~~ sb07_13_t1 0.997 0.894 1.100 1.000 18.980 0.000

Correlation of specific, facet-level change goals with curiosity change score (current personality) is not significantly different from zero, r = -0.114, p = 0.429.

6.4.2.52 Curiosity - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8797.007 8882.985 0.977 0.029 0.043
# parameters of interest
params_lcs_curio_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", # change goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.009 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.052 NA NA
d_curio_1 ~1 0.002 -0.040 0.045 0.130 0.111 0.912
curio_t1 ~1 4.434 4.362 4.506 12.250 120.804 0.000
d_curio_1 ~~ d_curio_1 0.000 -0.036 0.037 1.000 0.019 0.985
curio_t1 ~~ d_curio_1 -0.001 -0.027 0.024 -0.191 -0.099 0.921
d_curio_1 ~~ sb07_13_t1 0.004 -0.046 0.054 0.227 0.166 0.868
sb07_13_t1 ~~ sb07_13_t1 0.997 0.894 1.100 1.000 18.985 0.000

Correlation of specific, facet-level change goals with curiosity change score (ideal personality) is not significantly different from zero, r = 0.227, p = 0.868.

6.4.2.53 Aesthetic - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_hyp4 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb06_01_t1     # estimates the covariance/correlation with change goal variable

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb06_01_t1 ~~ sb06_01_t1
sb06_01_t1 ~ 1
'

fit_mi_lcs_aesth_curr_hyp4 <- lavaan(mi_lcs_aesth_curr_hyp4, 
                                     data=df_sbsa_wide_pers_sb %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                     estimator='mlr', fixed.x=FALSE, missing="fiml")
# This model did not converge properly with FIML and missings. No problem with complete data, though. 
summary(fit_mi_lcs_aesth_curr_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 193 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                36.010      32.684
  Degrees of freedom                                32          32
  P-value (Chi-square)                           0.286       0.433
  Scaling correction factor                                  1.102
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1057.895     812.052
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.303

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.996       0.999
  Tucker-Lewis Index (TLI)                       0.996       0.999
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.000

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4223.595   -4223.595
  Scaling correction factor                                  0.861
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4205.590   -4205.590
  Scaling correction factor                                  1.163
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8491.190    8491.190
  Bayesian (BIC)                              8574.837    8574.837
  Sample-size adjusted Bayesian (SABIC)       8505.052    8505.052

Root Mean Square Error of Approximation:

  RMSEA                                          0.019       0.008
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.047       0.041
  P-value H_0: RMSEA <= 0.050                    0.972       0.991
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.005
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.044
  P-value H_0: Robust RMSEA <= 0.050                         0.981
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.036       0.036

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.038    0.029
    b05_20_ (lmb2)  -24.165    1.236  -19.550    0.000   -0.925   -0.834
    b05_35_ (lmb3)  -22.385    1.167  -19.188    0.000   -0.857   -0.803
    b05_50_ (lmb4)  -18.358    1.399  -13.118    0.000   -0.703   -0.516
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.039    0.030
    b05_20_ (lmb2)  -24.165    1.236  -19.550    0.000   -0.951   -0.840
    b05_35_ (lmb3)  -22.385    1.167  -19.188    0.000   -0.881   -0.810
    b05_50_ (lmb4)  -18.358    1.399  -13.118    0.000   -0.722   -0.526
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.583    0.583

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.973    0.973

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1        -0.000    0.000   -2.586    0.010   -0.253   -0.253
  d_aesth_1 ~~                                                          
    sb06_01_t1        0.002    0.002    0.926    0.354    0.079    0.079
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.550    0.106    5.209    0.000    0.550    0.316
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.108    0.069    1.547    0.122    0.108    0.286
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.108    0.061    1.792    0.073    0.108    0.268
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        0.820    0.098    8.324    0.000    0.820    0.603

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1        -0.002    0.002   -0.920    0.358   -0.069   -0.069
    aesth_t1          3.022    0.059   51.429    0.000   78.947   78.947
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   76.854    3.510   21.893    0.000   76.854   69.256
   .bf05_35_1 (m3)   71.487    3.445   20.753    0.000   71.487   66.969
   .bf05_50_1 (m4)   58.912    4.004   14.712    0.000   58.912   43.266
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   76.854    3.510   21.893    0.000   76.854   67.946
   .bf05_35_2 (m3)   71.487    3.445   20.753    0.000   71.487   65.792
   .bf05_50_2 (m4)   58.912    4.004   14.712    0.000   58.912   42.946
    sb06_01_1        -0.003    0.055   -0.048    0.961   -0.003   -0.003

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.001    0.000    3.810    0.000    1.000    1.000
    asth_t1           0.001    0.000    9.499    0.000    1.000    1.000
   .b05_05_ (res1)    1.742    0.070   24.781    0.000    1.742    0.999
   .b05_20_ (res2)    0.376    0.076    4.931    0.000    0.376    0.305
   .b05_35_ (res3)    0.405    0.059    6.871    0.000    0.405    0.356
   .b05_50_ (res4)    1.360    0.099   13.728    0.000    1.360    0.734
   .b05_05_ (res1)    1.742    0.070   24.781    0.000    1.742    0.999
   .b05_20_ (res2)    0.376    0.076    4.931    0.000    0.376    0.294
   .b05_35_ (res3)    0.405    0.059    6.871    0.000    0.405    0.343
   .b05_50_ (res4)    1.360    0.099   13.728    0.000    1.360    0.723
    s06_01_           0.997    0.073   13.676    0.000    0.997    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 22 8491.19 8574.837 0.996 0.019 0.036
# parameters of interest
params_lcs_aesth_curr_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.973 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.583 NA NA
d_aesth_1 ~1 -0.002 -0.005 0.002 -0.069 -0.920 0.358
aesth_t1 ~1 3.022 2.907 3.137 78.947 51.429 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 3.810 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.253 -2.586 0.010
d_aesth_1 ~~ sb06_01_t1 0.002 -0.002 0.006 0.079 0.926 0.354
sb06_01_t1 ~~ sb06_01_t1 0.997 0.854 1.140 1.000 13.676 0.000
sb06_01_t1 ~1 -0.003 -0.111 0.106 -0.003 -0.048 0.961

Correlation of general change goal with aesthetic change score (current personality) is not significantly different from zero, r = 0.079, p = 0.354.

6.4.2.54 Aesthetic - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8894.508 8980.485 1 0 0.036
# parameters of interest
params_lcs_aesth_ideal_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.923 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.569 NA NA
d_aesth_1 ~1 0.008 -0.007 0.022 0.105 1.054 0.292
aesth_t1 ~1 2.894 2.769 3.018 24.225 45.651 0.000
d_aesth_1 ~~ d_aesth_1 0.005 -0.006 0.017 1.000 0.939 0.348
aesth_t1 ~~ d_aesth_1 -0.001 -0.005 0.002 -0.166 -0.818 0.413
d_aesth_1 ~~ sb06_01_t1 0.005 -0.009 0.020 0.072 0.725 0.469
sb06_01_t1 ~~ sb06_01_t1 0.997 0.860 1.135 1.000 14.195 0.000
sb06_01_t1 ~1 0.000 -0.104 0.103 0.000 -0.005 0.996

Correlation of general change goal with aesthetic change score (ideal personality) is not significantly different from zero, r = 0.072, p = 0.469.

6.4.2.55 Aesthetic - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal): (here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_specif_hyp4 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_aesth_1 ~~ sb07_14_t1    # estimates the covariance/correlation with change goal variable

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb07_14_t1 ~~ sb07_14_t1
sb07_14_t1 ~ 1
'

fit_mi_lcs_aesth_curr_specif_hyp4 <- lavaan(mi_lcs_aesth_curr_specif_hyp4, 
                                            data=df_sbsa_wide_pers_sb %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
Warning in lav_object_post_check(object): lavaan WARNING: covariance matrix of latent variables
                is not positive definite;
                use lavInspect(fit, "cov.lv") to investigate.
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_specif_hyp4, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 95 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        31
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               389.367     351.031
  Degrees of freedom                                33          33
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.109
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1061.777     828.089
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.282

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.653       0.598
  Tucker-Lewis Index (TLI)                       0.621       0.562
                                                                  
  Robust Comparative Fit Index (CFI)                         0.652
  Robust Tucker-Lewis Index (TLI)                            0.621

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4398.704   -4398.704
  Scaling correction factor                                  0.805
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4204.020   -4204.020
  Scaling correction factor                                  1.140
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8839.408    8839.408
  Bayesian (BIC)                              8919.253    8919.253
  Sample-size adjusted Bayesian (SABIC)       8852.640    8852.640

Root Mean Square Error of Approximation:

  RMSEA                                          0.181       0.171
  90 Percent confidence interval - lower         0.165       0.156
  90 Percent confidence interval - upper         0.197       0.186
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                  
  Robust RMSEA                                               0.180
  90 Percent confidence interval - lower                     0.164
  90 Percent confidence interval - upper                     0.197
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.206       0.206

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.000    0.000
    b05_20_ (lmb2)   -3.378    2.774   -1.218    0.223   -0.000   -0.000
    b05_35_ (lmb3)   -3.589    2.970   -1.208    0.227   -0.000   -0.000
    b05_50_ (lmb4)   -3.742    3.167   -1.181    0.237   -0.000   -0.000
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.145    0.110
    b05_20_ (lmb2)   -3.378    2.774   -1.218    0.223   -0.491   -0.426
    b05_35_ (lmb3)   -3.589    2.970   -1.208    0.227   -0.522   -0.464
    b05_50_ (lmb4)   -3.742    3.167   -1.181    0.237   -0.544   -0.385
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.837    0.837

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.000    0.000

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 ~~                                                           
    d_aesth_1         0.003    0.005    0.606    0.545      Inf      Inf
  d_aesth_1 ~~                                                          
    sb07_14_t1       -0.022    0.024   -0.900    0.368   -0.179   -0.179
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.546    0.105    5.191    0.000    0.546    0.315
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.733    0.095    7.691    0.000    0.733    0.674
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.637    0.084    7.618    0.000    0.637    0.642
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        1.183    0.107   11.100    0.000    1.183    0.694

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
    d_aesth_1        -0.006    0.011   -0.536    0.592   -0.048   -0.048
    aesth_t1          3.024    0.059   51.430    0.000      Inf      Inf
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   14.055    8.394    1.674    0.094   14.055   13.481
   .bf05_35_1 (m3)   14.701    8.981    1.637    0.102   14.701   14.749
   .bf05_50_1 (m4)   14.754    9.573    1.541    0.123   14.754   11.302
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   14.055    8.394    1.674    0.094   14.055   12.194
   .bf05_35_2 (m3)   14.701    8.981    1.637    0.102   14.701   13.065
   .bf05_50_2 (m4)   14.754    9.573    1.541    0.123   14.754   10.431
    sb07_14_1        -0.036    0.055   -0.657    0.511   -0.036   -0.036

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
    d_sth_1           0.015    0.026    0.574    0.566    1.000    1.000
   .b05_05_ (res1)    1.732    0.071   24.280    0.000    1.732    1.000
   .b05_20_ (res2)    1.087    0.085   12.848    0.000    1.087    1.000
   .b05_35_ (res3)    0.993    0.075   13.189    0.000    0.993    1.000
   .b05_50_ (res4)    1.704    0.089   19.045    0.000    1.704    1.000
   .b05_05_ (res1)    1.732    0.071   24.280    0.000    1.732    0.988
   .b05_20_ (res2)    1.087    0.085   12.848    0.000    1.087    0.818
   .b05_35_ (res3)    0.993    0.075   13.189    0.000    0.993    0.785
   .b05_50_ (res4)    1.704    0.089   19.045    0.000    1.704    0.852
    s07_14_           0.999    0.047   21.060    0.000    0.999    1.000
    asth_t1           0.000                                 NaN      NaN
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 21 8839.408 8919.253 0.653 0.181 0.206
# parameters of interest
params_lcs_aesth_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.000 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.837 NA NA
d_aesth_1 ~1 -0.006 -0.027 0.015 -0.048 -0.536 0.592
aesth_t1 ~1 3.024 2.909 3.139 Inf 51.430 0.000
d_aesth_1 ~~ d_aesth_1 0.015 -0.036 0.066 1.000 0.574 0.566
aesth_t1 ~~ d_aesth_1 0.003 -0.007 0.013 Inf 0.606 0.545
d_aesth_1 ~~ sb07_14_t1 -0.022 -0.069 0.026 -0.179 -0.900 0.368
sb07_14_t1 ~~ sb07_14_t1 0.999 0.906 1.092 1.000 21.060 0.000

Correlation of specific, facet-level change goals with aesthetic change score (current personality) is not significantly different from zero, r = -0.179, p = 0.368.

6.4.2.56 Aesthetic - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8886.945 8972.922 1 0 0.042
# parameters of interest
params_lcs_aesth_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", # change goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.940 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.592 NA NA
d_aesth_1 ~1 0.007 -0.007 0.021 0.094 1.004 0.315
aesth_t1 ~1 2.893 2.769 3.018 23.824 45.658 0.000
d_aesth_1 ~~ d_aesth_1 0.006 -0.006 0.018 1.000 0.953 0.341
aesth_t1 ~~ d_aesth_1 -0.002 -0.006 0.002 -0.211 -0.873 0.383
d_aesth_1 ~~ sb07_14_t1 -0.018 -0.041 0.006 -0.232 -1.488 0.137
sb07_14_t1 ~~ sb07_14_t1 0.998 0.911 1.086 1.000 22.299 0.000

Correlation of specific, facet-level change goals with aesthetic change score (ideal personality) is not significantly different from zero, r = -0.232, p = 0.137.

6.4.2.57 Imagination - current personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8570.62 8656.598 0.956 0.061 0.062
# parameters of interest
params_lcs_imagi_curr_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.969 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.473 NA NA
d_imagi_1 ~1 0.099 0.034 0.163 0.279 2.994 0.003
imagi_t1 ~1 3.567 3.470 3.665 4.930 71.862 0.000
d_imagi_1 ~~ d_imagi_1 0.125 0.043 0.206 1.000 2.989 0.003
imagi_t1 ~~ d_imagi_1 -0.045 -0.112 0.021 -0.177 -1.330 0.183
d_imagi_1 ~~ sb06_01_t1 0.011 -0.052 0.075 0.032 0.348 0.728
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.192 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 0.005 0.996

Correlation of general change goal with imagination change score (current personality) is not significantly different from zero, r = 0.032, p = 0.728.

6.4.2.58 Imagination - ideal personality: general change goals

Results summary (sb06_01_t1 = general change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8009.725 8095.703 0.932 0.053 0.054
# parameters of interest
params_lcs_imagi_ideal_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb06_01_t1", "sb06_01_t1 ~~ sb06_01_t1", "sb06_01_t1 ~1 ", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.120 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.961 NA NA
d_imagi_1 ~1 0.021 -0.044 0.086 0.048 0.623 0.533
imagi_t1 ~1 4.563 4.496 4.630 9.129 133.420 0.000
d_imagi_1 ~~ d_imagi_1 0.184 0.051 0.316 1.000 2.715 0.007
imagi_t1 ~~ d_imagi_1 -0.117 -0.224 -0.011 -0.547 -2.153 0.031
d_imagi_1 ~~ sb06_01_t1 0.015 -0.044 0.075 0.036 0.509 0.611
sb06_01_t1 ~~ sb06_01_t1 0.997 0.859 1.135 1.000 14.191 0.000
sb06_01_t1 ~1 0.000 -0.104 0.104 0.000 -0.001 1.000

Correlation of general change goal with imagination change score (ideal personality) is not significantly different from zero, r = 0.036, p = 0.611.

6.4.2.59 Imagination - current personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8567.337 8653.315 0.926 0.08 0.09
# parameters of interest
params_lcs_imagi_curr_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.964 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.467 NA NA
d_imagi_1 ~1 0.099 0.034 0.164 0.282 3.002 0.003
imagi_t1 ~1 3.567 3.470 3.665 4.928 71.846 0.000
d_imagi_1 ~~ d_imagi_1 0.123 0.042 0.204 1.000 2.968 0.003
imagi_t1 ~~ d_imagi_1 -0.042 -0.108 0.024 -0.164 -1.237 0.216
d_imagi_1 ~~ sb07_15_t1 0.024 -0.040 0.088 0.069 0.740 0.459
sb07_15_t1 ~~ sb07_15_t1 0.997 0.909 1.085 1.000 22.165 0.000

Correlation of specific, facet-level change goals with imagination change score (current personality) is not significantly different from zero, r = 0.069, p = 0.459.

6.4.2.60 Imagination - ideal personality: specific, facet-level change goals

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp4) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 22 8007.118 8093.096 0.926 0.055 0.058
# parameters of interest
params_lcs_imagi_ideal_specif_hyp4 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp4, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", # change goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp4, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.119 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.957 NA NA
d_imagi_1 ~1 0.021 -0.044 0.086 0.048 0.621 0.534
imagi_t1 ~1 4.563 4.496 4.630 9.149 133.711 0.000
d_imagi_1 ~~ d_imagi_1 0.182 0.051 0.313 1.000 2.729 0.006
imagi_t1 ~~ d_imagi_1 -0.116 -0.222 -0.010 -0.546 -2.151 0.031
d_imagi_1 ~~ sb07_15_t1 -0.008 -0.063 0.047 -0.019 -0.288 0.774
sb07_15_t1 ~~ sb07_15_t1 0.997 0.909 1.085 1.000 22.166 0.000

Correlation of specific, facet-level change goals with imagination change score (ideal personality) is not significantly different from zero, r = -0.019, p = 0.774.

6.4.3 Hyp 4: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp4 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.064 0.187 2.423 0.015
extraversion ideal general 0.061 0.203 2.245 0.025
extraversion current specific 0.008 0.048 0.458 0.647
extraversion ideal specific 0.026 0.173 0.948 0.343
agreeableness current general -0.014 -0.064 -0.805 0.421
agreeableness ideal general 0.016 0.058 0.742 0.458
agreeableness current specific 0.004 0.028 0.303 0.762
agreeableness ideal specific -0.020 -0.113 -1.368 0.171
conscientiousness current general 0.007 0.021 0.311 0.756
conscientiousness ideal general 0.011 0.032 0.444 0.657
conscientiousness current specific -0.019 -0.068 -0.832 0.405
conscientiousness ideal specific -0.006 -0.024 -0.343 0.732
neuroticism current general -0.045 -0.092 -1.514 0.130
neuroticism ideal general -0.029 -0.090 -1.267 0.205
neuroticism current specific 0.080 0.213 2.591 0.010
neuroticism ideal specific 0.001 0.006 0.083 0.934
openness current general -0.013 -0.068 -0.717 0.474
openness ideal general -0.014 -0.058 -0.622 0.534
openness current specific 0.021 0.225 2.242 0.025
openness ideal specific 0.016 0.129 1.386 0.166

Three covariances/correlations that significantly differ from zero:
- Changes in current-level and ideal-level extraversion covary with the general change goal.
- Changes in current-level neuroticism covary with the specific trait goals (latent factor of the three N facets).
- Changes in current-level openness covary with the specific trait goals (latent factor of the three O facets).

Results summary across the Big Five facets: covariance of the latent change score and change goal(s)

kable(df_table_hyp4[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.088 0.170 2.159 0.031
sociability ideal general 0.048 0.203 1.727 0.084
sociability current specific -0.038 -0.071 -0.970 0.332
sociability ideal specific 0.056 0.231 2.111 0.035
assertiveness current general 0.035 0.144 1.136 0.256
assertiveness ideal general 0.050 0.241 2.400 0.016
assertiveness current specific 0.011 0.046 0.428 0.668
assertiveness ideal specific 0.013 0.061 0.692 0.489
energy current general 0.018 0.084 0.933 0.351
energy ideal general 0.036 0.140 1.440 0.150
energy current specific -0.020 -0.092 -1.127 0.260
energy ideal specific -0.020 -0.079 -0.818 0.413
compassion current general 0.038 0.148 1.390 0.165
compassion ideal general 0.025 0.052 0.580 0.562
compassion current specific -0.003 -0.012 -0.095 0.924
compassion ideal specific -0.024 -0.051 -0.588 0.556
respectfulness current general -0.035 -0.108 -1.351 0.177
respectfulness ideal general 0.008 0.025 0.341 0.733
respectfulness current specific 0.009 0.026 0.304 0.761
respectfulness ideal specific -0.042 -0.138 -1.971 0.049
trust current general 0.007 0.020 0.213 0.832
trust ideal general 0.017 0.067 0.697 0.486
trust current specific 0.002 0.007 0.071 0.944
trust ideal specific -0.013 -0.055 -0.573 0.566
organization current general 0.075 0.145 1.822 0.068
organization ideal general 0.016 0.047 0.577 0.564
organization current specific -0.070 -0.130 -1.492 0.136
organization ideal specific -0.034 -0.102 -1.256 0.209
productiveness current general -0.023 -0.062 -0.739 0.460
productiveness ideal general -0.010 -0.030 -0.381 0.703
productiveness current specific -0.041 -0.106 -1.233 0.218
productiveness ideal specific -0.003 -0.008 -0.122 0.903
responsibility current general -0.038 -0.182 -1.757 0.079
responsibility ideal general 0.020 0.070 0.700 0.484
responsibility current specific -0.041 -0.186 -1.826 0.068
responsibility ideal specific 0.007 0.025 0.252 0.801
anxiety current general -0.071 -0.125 -1.763 0.078
anxiety ideal general -0.003 -0.015 -0.185 0.853
anxiety current specific 0.154 0.244 3.083 0.002
anxiety ideal specific -0.007 -0.031 -0.454 0.650
depression current general -0.025 -0.068 -0.956 0.339
depression ideal general -0.036 -0.110 -1.401 0.161
depression current specific 0.115 0.282 3.059 0.002
depression ideal specific 0.020 0.063 0.978 0.328
volatility current general 0.012 0.023 0.308 0.758
volatility ideal general -0.068 -0.226 -2.172 0.030
volatility current specific 0.013 0.025 0.321 0.748
volatility ideal specific -0.004 -0.012 -0.123 0.902
curiosity current general -0.002 -0.009 -0.070 0.944
curiosity ideal general 0.009 0.352 0.368 0.713
curiosity current specific -0.022 -0.114 -0.790 0.429
curiosity ideal specific 0.004 0.227 0.166 0.868
aesthetic current general 0.002 0.079 0.926 0.354
aesthetic ideal general 0.005 0.072 0.725 0.469
aesthetic current specific -0.022 -0.179 -0.900 0.368
aesthetic ideal specific -0.018 -0.232 -1.488 0.137
imagination current general 0.011 0.032 0.348 0.728
imagination ideal general 0.015 0.036 0.509 0.611
imagination current specific 0.024 0.069 0.740 0.459
imagination ideal specific -0.008 -0.019 -0.288 0.774

Looking at the facets, we see a few covariances that significantly differ from zero:
- For sociability, changes in the current-level covary with the general change goal and changes in the ideal-level with the specific facet change goal (both effects barely significant).
- For assertiveness, changes in the ideal-level covary with the general change goal. - Matching the effects from neuroticism above, we find that changes in current-level anxiety and depression covary with the respective specific facet change goal. Changes in ideal-level volatility covary with the general change goal.
- Further, changes in ideal-level respectfulness covary with the specific facet change goal (small effect that is barely significant; in the right direction, though -> minus sign is because a reverse-keyed item was used as reference indicator).
- For anxiety and depression, changes in the current-level covary with the specific facet change goal.
- For volatility, changes in the ideal-level covary with the general change goal.

Prepare data frame for plotting:

Show the code
df_table_hyp4_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_ideal_hyp4 %>% filter(term=="d_extra_1 ~~ sb06_01_t1"),
  params_lcs_extra_curr_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_ideal_hyp4 %>% filter(term=="d_agree_1 ~~ sb06_01_t1"),
  params_lcs_agree_curr_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_ideal_hyp4 %>% filter(term=="d_consc_1 ~~ sb06_01_t1"),
  params_lcs_consc_curr_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_ideal_hyp4 %>% filter(term=="d_neuro_1 ~~ sb06_01_t1"),
  params_lcs_neuro_curr_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_ideal_hyp4 %>% filter(term=="d_openn_1 ~~ sb06_01_t1"),
  params_lcs_openn_curr_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp4 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_ideal_hyp4 %>% filter(term=="d_socia_1 ~~ sb06_01_t1"),
  params_lcs_socia_curr_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_socia_ideal_specif_hyp4 %>% filter(term=="d_socia_1 ~~ sb07_01_t1"),
  params_lcs_asser_curr_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_ideal_hyp4 %>% filter(term=="d_asser_1 ~~ sb06_01_t1"),
  params_lcs_asser_curr_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_asser_ideal_specif_hyp4 %>% filter(term=="d_asser_1 ~~ sb07_02_t1"),
  params_lcs_energ_curr_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_ideal_hyp4 %>% filter(term=="d_energ_1 ~~ sb06_01_t1"),
  params_lcs_energ_curr_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_energ_ideal_specif_hyp4 %>% filter(term=="d_energ_1 ~~ sb07_03_t1"),
  params_lcs_compa_curr_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_ideal_hyp4 %>% filter(term=="d_compa_1 ~~ sb06_01_t1"),
  params_lcs_compa_curr_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_compa_ideal_specif_hyp4 %>% filter(term=="d_compa_1 ~~ sb07_04_t1"),
  params_lcs_respe_curr_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_ideal_hyp4 %>% filter(term=="d_respe_1 ~~ sb06_01_t1"),
  params_lcs_respe_curr_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_respe_ideal_specif_hyp4 %>% filter(term=="d_respe_1 ~~ sb07_05_t1"),
  params_lcs_trust_curr_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_ideal_hyp4 %>% filter(term=="d_trust_1 ~~ sb06_01_t1"),
  params_lcs_trust_curr_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_trust_ideal_specif_hyp4 %>% filter(term=="d_trust_1 ~~ sb07_06_t1"),
  params_lcs_organ_curr_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_ideal_hyp4 %>% filter(term=="d_organ_1 ~~ sb06_01_t1"),
  params_lcs_organ_curr_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_organ_ideal_specif_hyp4 %>% filter(term=="d_organ_1 ~~ sb07_07_t1"),
  params_lcs_produ_curr_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_ideal_hyp4 %>% filter(term=="d_produ_1 ~~ sb06_01_t1"),
  params_lcs_produ_curr_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_produ_ideal_specif_hyp4 %>% filter(term=="d_produ_1 ~~ sb07_08_t1"),
  params_lcs_respo_curr_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_ideal_hyp4 %>% filter(term=="d_respo_1 ~~ sb06_01_t1"),
  params_lcs_respo_curr_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_respo_ideal_specif_hyp4 %>% filter(term=="d_respo_1 ~~ sb07_09_t1"),
  params_lcs_anxie_curr_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_ideal_hyp4 %>% filter(term=="d_anxie_1 ~~ sb06_01_t1"),
  params_lcs_anxie_curr_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp4 %>% filter(term=="d_anxie_1 ~~ sb07_10_t1"),
  params_lcs_depre_curr_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_ideal_hyp4 %>% filter(term=="d_depre_1 ~~ sb06_01_t1"),
  params_lcs_depre_curr_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_depre_ideal_specif_hyp4 %>% filter(term=="d_depre_1 ~~ sb07_11_t1"),
  params_lcs_volat_curr_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_ideal_hyp4 %>% filter(term=="d_volat_1 ~~ sb06_01_t1"),
  params_lcs_volat_curr_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_volat_ideal_specif_hyp4 %>% filter(term=="d_volat_1 ~~ sb07_12_t1"),
  params_lcs_curio_curr_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_ideal_hyp4 %>% filter(term=="d_curio_1 ~~ sb06_01_t1"),
  params_lcs_curio_curr_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_curio_ideal_specif_hyp4 %>% filter(term=="d_curio_1 ~~ sb07_13_t1"),
  params_lcs_aesth_curr_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_ideal_hyp4 %>% filter(term=="d_aesth_1 ~~ sb06_01_t1"),
  params_lcs_aesth_curr_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp4 %>% filter(term=="d_aesth_1 ~~ sb07_14_t1"),
  params_lcs_imagi_curr_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_ideal_hyp4 %>% filter(term=="d_imagi_1 ~~ sb06_01_t1"),
  params_lcs_imagi_curr_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp4 %>% filter(term=="d_imagi_1 ~~ sb07_15_t1"),
) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp4_plot <- df_table_hyp4_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general change goal
  • specific = specific, facet-level change goal(s)
Show the code
ggplot(df_table_hyp4_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.5 H5: Acceptance goals and change in personality (current / ideal) in self-acceptance group

In the self-acceptance group, there will be a correlation between acceptance goals and change in ideal personality ratings but not change in current personality ratings.

We will test this one domain/facet at a time. We will use both general continuous change goal score as well as trait-specific change goals. To test this hypothesis, we will estimate the mean-level difference across time for both current and ideal trait ratings using latent change models and correlate change goals with the change variable from those models.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07")), # facet-specific change goals
         sa06_01) %>% # general change goal
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with("sa07"), sa06_01)) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, sa06_01_t2))
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa_wide_pers_sa <- df_sbsa_wide_pers_sa %>% 
  mutate_at(c(colnames(df_sbsa_wide_pers_sa)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa_wide_pers_sa)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa)

6.5.1 Big Five traits

6.5.1.1 Extraversion - current personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_curr_hyp5 <- lavaan(mi_lcs_extra_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4667.882 4737.17 0.991 0.046 0.037
# parameters of interest
params_lcs_extra_curr_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                     "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                     "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.035 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.554 NA NA
d_extra_1 ~1 0.168 0.113 0.223 0.460 5.955 0.000
extra_t1 ~1 2.761 2.679 2.843 4.041 65.674 0.000
d_extra_1 ~~ d_extra_1 0.134 0.081 0.186 1.000 4.989 0.000
extra_t1 ~~ d_extra_1 -0.082 -0.125 -0.040 -0.329 -3.809 0.000
d_extra_1 ~~ sa06_01_t1 0.067 0.026 0.107 0.182 3.212 0.001
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.001 -0.105 0.107 0.001 0.024 0.981

The correlation of general acceptance goal with the extraversion change score (current personality) is significantly different from zero, r = 0.182, p = 0.001.

6.5.1.2 Extraversion - ideal personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_extra_ideal_hyp5 <- lavaan(mi_lcs_extra_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4105.561 4174.849 0.982 0.04 0.042
# parameters of interest
params_lcs_extra_ideal_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.073 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.909 NA NA
d_extra_1 ~1 -0.037 -0.096 0.022 -0.093 -1.230 0.219
extra_t1 ~1 3.713 3.651 3.775 7.927 118.212 0.000
d_extra_1 ~~ d_extra_1 0.157 0.085 0.229 1.000 4.288 0.000
extra_t1 ~~ d_extra_1 -0.093 -0.142 -0.044 -0.501 -3.739 0.000
d_extra_1 ~~ sa06_01_t1 0.026 -0.020 0.072 0.066 1.114 0.265
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.003 0.997

Correlation of general acceptance goal with extraversion change score (ideal personality) is not significantly different from zero, r = 0.066, p = 0.265.

6.5.1.3 Extraversion - current personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_curr_specif_hyp5 <- '
extra_t1 =~ 1*extra_curr_par1_t1 + lamb2*extra_curr_par2_t1 + lamb3*extra_curr_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_curr_par1_t2 + lamb2*extra_curr_par2_t2 + lamb3*extra_curr_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_curr_par1_t1 ~~ extra_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_curr_par2_t1 ~~ extra_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_curr_par3_t1 ~~ extra_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_curr_par1_t1 ~~ res1*extra_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_curr_par2_t1 ~~ res2*extra_curr_par2_t1   # This allows residual variance on indicator X2 at T1
extra_curr_par3_t1 ~~ res3*extra_curr_par3_t1   # This allows residual variance on indicator X3 at T1

extra_curr_par1_t2 ~~ res1*extra_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_curr_par2_t2 ~~ res2*extra_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_curr_par3_t2 ~~ res3*extra_curr_par3_t2  # This allows residual variance on indicator X3 at T2

extra_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_curr_specif_hyp5 <- lavaan(mi_lcs_extra_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6502.737 6598.97 0.908 0.119 0.183
# parameters of interest
params_lcs_extra_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.034 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.552 NA NA
d_extra_1 ~1 0.167 0.112 0.222 0.459 5.934 0.000
extra_t1 ~1 2.761 2.679 2.843 4.047 65.718 0.000
d_extra_1 ~~ d_extra_1 0.133 0.081 0.184 1.000 5.028 0.000
extra_t1 ~~ d_extra_1 -0.081 -0.129 -0.034 -0.327 -3.360 0.001
goals ~~ d_extra_1 0.012 -0.036 0.060 0.049 0.496 0.620
goals ~~ goals 0.456 0.245 0.667 1.000 4.240 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (current personality) is not significantly different from zero, r = 0.049, p = 0.62.

6.5.1.4 Extraversion - ideal personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_extra_ideal_specif_hyp5 <- '
extra_t1 =~ 1*extra_ideal_par1_t1 + lamb2*extra_ideal_par2_t1 + lamb3*extra_ideal_par3_t1 # This specifies the measurement model for extra_t1 
extra_t2 =~ 1*extra_ideal_par1_t2 + lamb2*extra_ideal_par2_t2 + lamb3*extra_ideal_par3_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

goals =~ 1*sa07_01_t1 + sa07_02_t1 + sa07_03_t1 # latent acceptance goal variable (three facets per trait)

extra_t2 ~ 1*extra_t1     # This parameter regresses extra_t2 perfectly on extra_t1
d_extra_1 =~ 1*extra_t2   # This defines the latent change score factor as measured perfectly by scores on extra_t2
extra_t2 ~ 0*1            # This line constrains the intercept of extra_t2 to 0
extra_t2 ~~ 0*extra_t2    # This fixes the variance of extra_t2 to 0

d_extra_1 ~ 1              # This estimates the intercept of the change score 
extra_t1 ~ 1               # This estimates the intercept of extra_t1 
d_extra_1 ~~ d_extra_1     # This estimates the variance of the change scores 
extra_t1 ~~ extra_t1       # This estimates the variance of the extra_t1 
extra_t1 ~~ d_extra_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_extra_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

extra_ideal_par1_t1 ~~ extra_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
extra_ideal_par2_t1 ~~ extra_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
extra_ideal_par3_t1 ~~ extra_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

extra_ideal_par1_t1 ~~ res1*extra_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
extra_ideal_par2_t1 ~~ res2*extra_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
extra_ideal_par3_t1 ~~ res3*extra_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

extra_ideal_par1_t2 ~~ res1*extra_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
extra_ideal_par2_t2 ~~ res2*extra_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
extra_ideal_par3_t2 ~~ res3*extra_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

extra_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
extra_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
extra_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

extra_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
extra_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
extra_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_01_t1 ~~ sa07_01_t1
sa07_02_t1 ~~ sa07_02_t1
sa07_03_t1 ~~ sa07_03_t1

sa07_01_t1 ~ 1
sa07_02_t1 ~ 1
sa07_03_t1 ~ 1
'
fit_mi_lcs_extra_ideal_specif_hyp5 <- lavaan(mi_lcs_extra_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_extra_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5933.246 6029.48 0.982 0.034 0.041
# parameters of interest
params_lcs_extra_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "goals ~~ d_extra_1", "goals ~~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.070 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.902 NA NA
d_extra_1 ~1 -0.038 -0.097 0.021 -0.096 -1.262 0.207
extra_t1 ~1 3.713 3.652 3.775 7.938 118.226 0.000
d_extra_1 ~~ d_extra_1 0.155 0.085 0.226 1.000 4.315 0.000
extra_t1 ~~ d_extra_1 -0.092 -0.140 -0.044 -0.496 -3.736 0.000
goals ~~ d_extra_1 -0.022 -0.070 0.026 -0.085 -0.905 0.365
goals ~~ goals 0.443 0.236 0.651 1.000 4.189 0.000

Correlation of specific, facet-level acceptance goals with extraversion change score (ideal personality) is not significantly different from zero, r = -0.085, p = 0.365.

6.5.1.5 Agreeableness - current personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_curr_hyp5 <- lavaan(mi_lcs_agree_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4108.415 4177.703 0.971 0.063 0.066
# parameters of interest
params_lcs_agree_curr_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                     "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                     "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.034 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.563 NA NA
d_agree_1 ~1 0.043 0.007 0.079 0.198 2.363 0.018
agree_t1 ~1 3.331 3.266 3.396 8.365 101.075 0.000
d_agree_1 ~~ d_agree_1 0.047 0.009 0.085 1.000 2.434 0.015
agree_t1 ~~ d_agree_1 -0.029 -0.060 0.003 -0.331 -1.795 0.073
d_agree_1 ~~ sa06_01_t1 0.030 -0.009 0.068 0.137 1.520 0.129
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.004 0.997

Correlation of general acceptance goal with agreeableness change score (current personality) is not significantly different from zero, r = 0.137, p = 0.129.

6.5.1.6 Agreeableness - ideal personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_agree_ideal_hyp5 <- lavaan(mi_lcs_agree_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4120.815 4190.103 0.973 0.066 0.071
# parameters of interest
params_lcs_agree_ideal_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.998 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.688 NA NA
d_agree_1 ~1 -0.012 -0.057 0.034 -0.036 -0.505 0.614
agree_t1 ~1 3.705 3.632 3.779 7.961 98.659 0.000
d_agree_1 ~~ d_agree_1 0.103 0.063 0.143 1.000 5.004 0.000
agree_t1 ~~ d_agree_1 -0.051 -0.082 -0.020 -0.342 -3.223 0.001
d_agree_1 ~~ sa06_01_t1 0.025 -0.015 0.066 0.079 1.219 0.223
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 -0.001 -0.107 0.106 -0.001 -0.010 0.992

Correlation of general acceptance goal with agreeableness change score (ideal personality) is not significantly different from zero, r = 0.079, p = 0.223.

6.5.1.7 Agreeableness - current personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_curr_specif_hyp5 <- '
agree_t1 =~ 1*agree_curr_par1_t1 + lamb2*agree_curr_par2_t1 + lamb3*agree_curr_par3_t1 # This specifies the measurement model for agree_t1
agree_t2 =~ 1*agree_curr_par1_t2 + lamb2*agree_curr_par2_t2 + lamb3*agree_curr_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_curr_par1_t1 ~~ agree_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_curr_par2_t1 ~~ agree_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_curr_par3_t1 ~~ agree_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_curr_par1_t1 ~~ res1*agree_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_curr_par2_t1 ~~ res2*agree_curr_par2_t1   # This allows residual variance on indicator X2 at T1
agree_curr_par3_t1 ~~ res3*agree_curr_par3_t1   # This allows residual variance on indicator X3 at T1

agree_curr_par1_t2 ~~ res1*agree_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_curr_par2_t2 ~~ res2*agree_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_curr_par3_t2 ~~ res3*agree_curr_par3_t2  # This allows residual variance on indicator X3 at T2

agree_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_curr_specif_hyp5 <- lavaan(mi_lcs_agree_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5868.167 5964.4 0.951 0.07 0.087
# parameters of interest
params_lcs_agree_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.012 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.537 NA NA
d_agree_1 ~1 0.043 0.007 0.078 0.201 2.339 0.019
agree_t1 ~1 3.331 3.266 3.396 8.333 101.004 0.000
d_agree_1 ~~ d_agree_1 0.045 0.009 0.081 1.000 2.472 0.013
agree_t1 ~~ d_agree_1 -0.024 -0.054 0.005 -0.288 -1.621 0.105
goals ~~ d_agree_1 0.004 -0.020 0.029 0.033 0.322 0.748
goals ~~ goals 0.324 0.172 0.477 1.000 4.173 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (current personality) is not significantly different from zero, r = 0.033, p = 0.748.

6.5.1.8 Agreeableness - ideal personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_agree_ideal_specif_hyp5 <- '
agree_t1 =~ 1*agree_ideal_par1_t1 + lamb2*agree_ideal_par2_t1 + lamb3*agree_ideal_par3_t1 # This specifies the measurement model for agree_t1 
agree_t2 =~ 1*agree_ideal_par1_t2 + lamb2*agree_ideal_par2_t2 + lamb3*agree_ideal_par3_t2 # This specifies the measurement model for agree_t2 with the equality constrained factor loadings

goals =~ 1*sa07_04_t1 + sa07_05_t1 + sa07_06_t1 # latent acceptance goal variable (three facets per trait)

agree_t2 ~ 1*agree_t1     # This parameter regresses agree_t2 perfectly on agree_t1
d_agree_1 =~ 1*agree_t2   # This defines the latent change score factor as measured perfectly by scores on agree_t2
agree_t2 ~ 0*1            # This line constrains the intercept of agree_t2 to 0
agree_t2 ~~ 0*agree_t2    # This fixes the variance of agree_t2 to 0

d_agree_1 ~ 1              # This estimates the intercept of the change score 
agree_t1 ~ 1               # This estimates the intercept of agree_t1 
d_agree_1 ~~ d_agree_1     # This estimates the variance of the change scores 
agree_t1 ~~ agree_t1       # This estimates the variance of the agree_t1 
agree_t1 ~~ d_agree_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_agree_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

agree_ideal_par1_t1 ~~ agree_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
agree_ideal_par2_t1 ~~ agree_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
agree_ideal_par3_t1 ~~ agree_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

agree_ideal_par1_t1 ~~ res1*agree_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
agree_ideal_par2_t1 ~~ res2*agree_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
agree_ideal_par3_t1 ~~ res3*agree_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

agree_ideal_par1_t2 ~~ res1*agree_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
agree_ideal_par2_t2 ~~ res2*agree_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
agree_ideal_par3_t2 ~~ res3*agree_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

agree_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
agree_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
agree_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

agree_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
agree_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
agree_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_04_t1 ~~ sa07_04_t1
sa07_05_t1 ~~ sa07_05_t1
sa07_06_t1 ~~ sa07_06_t1

sa07_04_t1 ~ 1
sa07_05_t1 ~ 1
sa07_06_t1 ~ 1
'
fit_mi_lcs_agree_ideal_specif_hyp5 <- lavaan(mi_lcs_agree_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_agree_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5878.878 5975.111 0.99 0.033 0.041
# parameters of interest
params_lcs_agree_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "goals ~~ d_agree_1", "goals ~~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.987 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.673 NA NA
d_agree_1 ~1 -0.012 -0.057 0.034 -0.037 -0.508 0.612
agree_t1 ~1 3.705 3.631 3.779 7.926 98.587 0.000
d_agree_1 ~~ d_agree_1 0.102 0.062 0.141 1.000 5.002 0.000
agree_t1 ~~ d_agree_1 -0.048 -0.078 -0.018 -0.321 -3.134 0.002
goals ~~ d_agree_1 0.006 -0.024 0.036 0.033 0.383 0.701
goals ~~ goals 0.318 0.157 0.480 1.000 3.874 0.000

Correlation of specific, facet-level acceptance goals with agreeableness change score (ideal personality) is not significantly different from zero, r = 0.033, p = 0.701.

6.5.1.9 Conscientiousness - current personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_curr_hyp5 <- lavaan(mi_lcs_consc_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4393.808 4463.096 0.991 0.051 0.024
# parameters of interest
params_lcs_consc_curr_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                     "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                     "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.008 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.475 NA NA
d_consc_1 ~1 0.154 0.105 0.202 0.438 6.228 0.000
consc_t1 ~1 3.503 3.415 3.591 4.699 77.897 0.000
d_consc_1 ~~ d_consc_1 0.123 0.074 0.173 1.000 4.909 0.000
consc_t1 ~~ d_consc_1 -0.066 -0.111 -0.021 -0.252 -2.894 0.004
d_consc_1 ~~ sa06_01_t1 0.021 -0.019 0.062 0.060 1.025 0.305
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.001 -0.106 0.107 0.001 0.011 0.991

Correlation of general acceptance goal with conscientiousness change score (current personality) is not significantly different from zero, r = 0.06, p = 0.305.

6.5.1.10 Conscientiousness - ideal personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_consc_ideal_hyp5 <- lavaan(mi_lcs_consc_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 3723.344 3792.632 0.985 0.045 0.058
# parameters of interest
params_lcs_consc_ideal_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.044 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.736 NA NA
d_consc_1 ~1 0.018 -0.031 0.066 0.051 0.706 0.480
consc_t1 ~1 4.377 4.319 4.435 8.935 148.541 0.000
d_consc_1 ~~ d_consc_1 0.119 0.058 0.181 1.000 3.783 0.000
consc_t1 ~~ d_consc_1 -0.070 -0.133 -0.006 -0.411 -2.152 0.031
d_consc_1 ~~ sa06_01_t1 -0.007 -0.046 0.033 -0.020 -0.344 0.731
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.002 0.999

Correlation of general acceptance goal with conscientiousness change score (ideal personality) is not significantly different from zero, r = -0.02, p = 0.731.

6.5.1.11 Conscientiousness - current personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_curr_specif_hyp5 <- '
consc_t1 =~ 1*consc_curr_par1_t1 + lamb2*consc_curr_par2_t1 + lamb3*consc_curr_par3_t1 # This specifies the measurement model for consc_t1 
consc_t2 =~ 1*consc_curr_par1_t2 + lamb2*consc_curr_par2_t2 + lamb3*consc_curr_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_curr_par1_t1 ~~ consc_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_curr_par2_t1 ~~ consc_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_curr_par3_t1 ~~ consc_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_curr_par1_t1 ~~ res1*consc_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_curr_par2_t1 ~~ res2*consc_curr_par2_t1   # This allows residual variance on indicator X2 at T1
consc_curr_par3_t1 ~~ res3*consc_curr_par3_t1   # This allows residual variance on indicator X3 at T1

consc_curr_par1_t2 ~~ res1*consc_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_curr_par2_t2 ~~ res2*consc_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_curr_par3_t2 ~~ res3*consc_curr_par3_t2  # This allows residual variance on indicator X3 at T2

consc_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_curr_specif_hyp5 <- lavaan(mi_lcs_consc_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5991.234 6087.467 0.911 0.142 0.251
# parameters of interest
params_lcs_consc_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.075 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.546 NA NA
d_consc_1 ~1 0.152 0.104 0.201 0.401 6.164 0.000
consc_t1 ~1 3.503 3.415 3.592 4.691 77.881 0.000
d_consc_1 ~~ d_consc_1 0.144 0.079 0.209 1.000 4.372 0.000
consc_t1 ~~ d_consc_1 -0.110 -0.172 -0.047 -0.387 -3.442 0.001
goals ~~ d_consc_1 -0.072 -0.125 -0.018 -0.256 -2.610 0.009
goals ~~ goals 0.543 0.412 0.674 1.000 8.109 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (current personality) is significantly different from zero, r = -0.256, p = 0.009.

6.5.1.12 Conscientiousness - ideal personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_consc_ideal_specif_hyp5 <- '
consc_t1 =~ 1*consc_ideal_par1_t1 + lamb2*consc_ideal_par2_t1 + lamb3*consc_ideal_par3_t1 # This specifies the measurement model for consc_t1
consc_t2 =~ 1*consc_ideal_par1_t2 + lamb2*consc_ideal_par2_t2 + lamb3*consc_ideal_par3_t2 # This specifies the measurement model for consc_t2 with the equality constrained factor loadings

goals =~ 1*sa07_07_t1 + sa07_08_t1 + sa07_09_t1 # latent acceptance goal variable (three facets per trait)

consc_t2 ~ 1*consc_t1     # This parameter regresses consc_t2 perfectly on consc_t1
d_consc_1 =~ 1*consc_t2   # This defines the latent change score factor as measured perfectly by scores on consc_t2
consc_t2 ~ 0*1            # This line constrains the intercept of consc_t2 to 0
consc_t2 ~~ 0*consc_t2    # This fixes the variance of consc_t2 to 0

d_consc_1 ~ 1              # This estimates the intercept of the change score 
consc_t1 ~ 1               # This estimates the intercept of consc_t1 
d_consc_1 ~~ d_consc_1     # This estimates the variance of the change scores 
consc_t1 ~~ consc_t1       # This estimates the variance of the consc_t1 
consc_t1 ~~ d_consc_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_consc_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

consc_ideal_par1_t1 ~~ consc_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
consc_ideal_par2_t1 ~~ consc_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
consc_ideal_par3_t1 ~~ consc_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

consc_ideal_par1_t1 ~~ res1*consc_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
consc_ideal_par2_t1 ~~ res2*consc_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
consc_ideal_par3_t1 ~~ res3*consc_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

consc_ideal_par1_t2 ~~ res1*consc_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
consc_ideal_par2_t2 ~~ res2*consc_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
consc_ideal_par3_t2 ~~ res3*consc_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

consc_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
consc_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
consc_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

consc_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
consc_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
consc_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_07_t1 ~~ sa07_07_t1
sa07_08_t1 ~~ sa07_08_t1
sa07_09_t1 ~~ sa07_09_t1

sa07_07_t1 ~ 1
sa07_08_t1 ~ 1
sa07_09_t1 ~ 1
'
fit_mi_lcs_consc_ideal_specif_hyp5 <- lavaan(mi_lcs_consc_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_consc_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5327.094 5423.327 0.995 0.023 0.053
# parameters of interest
params_lcs_consc_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "goals ~~ d_consc_1", "goals ~~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.050 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.746 NA NA
d_consc_1 ~1 0.017 -0.031 0.066 0.050 0.700 0.484
consc_t1 ~1 4.377 4.319 4.435 8.916 148.483 0.000
d_consc_1 ~~ d_consc_1 0.122 0.059 0.184 1.000 3.788 0.000
consc_t1 ~~ d_consc_1 -0.072 -0.135 -0.008 -0.421 -2.221 0.026
goals ~~ d_consc_1 -0.021 -0.053 0.011 -0.083 -1.310 0.190
goals ~~ goals 0.540 0.407 0.674 1.000 7.938 0.000

The correlation of specific, facet-level acceptance goals with the conscientiousness change score (ideal personality) is not significantly different from zero, r = -0.083, p = 0.19.

6.5.1.13 Neuroticism - current personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_curr_hyp5 <- lavaan(mi_lcs_neuro_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4792.486 4861.774 0.982 0.07 0.087
# parameters of interest
params_lcs_neuro_curr_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                     "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                     "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.975 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.561 NA NA
d_neuro_1 ~1 -0.184 -0.242 -0.125 -0.419 -6.184 0.000
neuro_t1 ~1 3.519 3.426 3.612 4.620 74.407 0.000
d_neuro_1 ~~ d_neuro_1 0.192 0.132 0.252 1.000 6.242 0.000
neuro_t1 ~~ d_neuro_1 -0.081 -0.136 -0.026 -0.243 -2.880 0.004
d_neuro_1 ~~ sa06_01_t1 -0.069 -0.127 -0.010 -0.157 -2.306 0.021
sa06_01_t1 ~~ sa06_01_t1 0.998 0.806 1.190 1.000 10.182 0.000
sa06_01_t1 ~1 0.002 -0.104 0.108 0.002 0.037 0.971

Correlation of general acceptance goal with neuroticism change score (current personality) is significantly different from zero, r = -0.157, p = 0.021.

6.5.1.14 Neuroticism - ideal personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_hyp5 <- lavaan(mi_lcs_neuro_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 3810.141 3879.429 0.977 0.049 0.053
# parameters of interest
params_lcs_neuro_ideal_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.783 NA NA
d_neuro_1 ~1 0.011 -0.038 0.059 0.033 0.431 0.666
neuro_t1 ~1 1.646 1.595 1.697 4.212 63.180 0.000
d_neuro_1 ~~ d_neuro_1 0.106 0.056 0.156 1.000 4.155 0.000
neuro_t1 ~~ d_neuro_1 -0.043 -0.072 -0.014 -0.337 -2.900 0.004
d_neuro_1 ~~ sa06_01_t1 -0.014 -0.052 0.024 -0.043 -0.728 0.467
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.003 0.997

Correlation of general acceptance goal with neuroticism change score (ideal personality) is not significantly different from zero, r = -0.043, p = 0.467.

6.5.1.15 Neuroticism - current personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_curr_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_curr_par1_t1 + lamb2*neuro_curr_par2_t1 + lamb3*neuro_curr_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_curr_par1_t2 + lamb2*neuro_curr_par2_t2 + lamb3*neuro_curr_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_curr_par1_t1 ~~ neuro_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_curr_par2_t1 ~~ neuro_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_curr_par3_t1 ~~ neuro_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_curr_par1_t1 ~~ res1*neuro_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_curr_par2_t1 ~~ res2*neuro_curr_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_curr_par3_t1 ~~ res3*neuro_curr_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_curr_par1_t2 ~~ res1*neuro_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_curr_par2_t2 ~~ res2*neuro_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_curr_par3_t2 ~~ res3*neuro_curr_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_curr_specif_hyp5 <- lavaan(mi_lcs_neuro_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 6535.677 6631.91 0.959 0.087 0.146
# parameters of interest
params_lcs_neuro_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.002 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.590 NA NA
d_neuro_1 ~1 -0.182 -0.240 -0.124 -0.406 -6.157 0.000
neuro_t1 ~1 3.519 3.426 3.612 4.620 74.388 0.000
d_neuro_1 ~~ d_neuro_1 0.201 0.136 0.266 1.000 6.044 0.000
neuro_t1 ~~ d_neuro_1 -0.102 -0.162 -0.042 -0.298 -3.339 0.001
goals ~~ d_neuro_1 0.014 -0.028 0.056 0.053 0.650 0.516
goals ~~ goals 0.343 0.154 0.533 1.000 3.551 0.000

Correlation of specific, facet-level acceptance goals with neuroticism change score (current personality) is not significantly different from zero, r = 0.053, p = 0.516.

6.5.1.16 Neuroticism - ideal personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_neuro_ideal_specif_hyp5 <- '
neuro_t1 =~ 1*neuro_ideal_par1_t1 + lamb2*neuro_ideal_par2_t1 + lamb3*neuro_ideal_par3_t1 # This specifies the measurement model for neuro_t1 
neuro_t2 =~ 1*neuro_ideal_par1_t2 + lamb2*neuro_ideal_par2_t2 + lamb3*neuro_ideal_par3_t2 # This specifies the measurement model for neuro_t2 with the equality constrained factor loadings

goals =~ 1*sa07_10_t1 + sa07_11_t1 + sa07_12_t1 # latent acceptance goal variable (three facets per trait)

neuro_t2 ~ 1*neuro_t1     # This parameter regresses neuro_t2 perfectly on neuro_t1
d_neuro_1 =~ 1*neuro_t2   # This defines the latent change score factor as measured perfectly by scores on neuro_t2
neuro_t2 ~ 0*1            # This line constrains the intercept of neuro_t2 to 0
neuro_t2 ~~ 0*neuro_t2    # This fixes the variance of neuro_t2 to 0

d_neuro_1 ~ 1              # This estimates the intercept of the change score 
neuro_t1 ~ 1               # This estimates the intercept of neuro_t1 
d_neuro_1 ~~ d_neuro_1     # This estimates the variance of the change scores 
neuro_t1 ~~ neuro_t1       # This estimates the variance of the neuro_t1 
neuro_t1 ~~ d_neuro_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_neuro_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

neuro_ideal_par1_t1 ~~ neuro_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
neuro_ideal_par2_t1 ~~ neuro_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
neuro_ideal_par3_t1 ~~ neuro_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

neuro_ideal_par1_t1 ~~ res1*neuro_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
neuro_ideal_par2_t1 ~~ res2*neuro_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
neuro_ideal_par3_t1 ~~ res3*neuro_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

neuro_ideal_par1_t2 ~~ res1*neuro_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
neuro_ideal_par2_t2 ~~ res2*neuro_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
neuro_ideal_par3_t2 ~~ res3*neuro_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

neuro_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
neuro_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
neuro_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

neuro_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
neuro_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
neuro_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_10_t1 ~~ sa07_10_t1
sa07_11_t1 ~~ sa07_11_t1
sa07_12_t1 ~~ sa07_12_t1

sa07_10_t1 ~ 1
sa07_11_t1 ~ 1
sa07_12_t1 ~ 1
'
fit_mi_lcs_neuro_ideal_specif_hyp5 <- lavaan(mi_lcs_neuro_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_neuro_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5544.967 5641.201 0.972 0.047 0.049
# parameters of interest
params_lcs_neuro_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "goals ~~ d_neuro_1", "goals ~~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.939 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.780 NA NA
d_neuro_1 ~1 0.011 -0.037 0.059 0.034 0.445 0.656
neuro_t1 ~1 1.646 1.595 1.697 4.229 63.227 0.000
d_neuro_1 ~~ d_neuro_1 0.105 0.056 0.153 1.000 4.209 0.000
neuro_t1 ~~ d_neuro_1 -0.042 -0.070 -0.014 -0.335 -2.932 0.003
goals ~~ d_neuro_1 0.025 0.004 0.046 0.140 2.319 0.020
goals ~~ goals 0.301 0.085 0.518 1.000 2.725 0.006

The correlation of specific, facet-level acceptance goals with the neuroticism change score (ideal personality) is significantly different from zero, r = 0.14, p = 0.02.

6.5.1.17 Openness - current personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_curr_hyp5 <- lavaan(mi_lcs_openn_curr_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
summary(fit_mi_lcs_openn_curr_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4380.108 4449.396 0.998 0.017 0.028
# parameters of interest
params_lcs_openn_curr_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                     "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                     "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.057 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.599 NA NA
d_openn_1 ~1 0.075 0.031 0.119 0.247 3.307 0.001
openn_t1 ~1 3.474 3.399 3.549 6.490 91.037 0.000
d_openn_1 ~~ d_openn_1 0.092 0.055 0.129 1.000 4.894 0.000
openn_t1 ~~ d_openn_1 -0.061 -0.092 -0.030 -0.376 -3.912 0.000
d_openn_1 ~~ sa06_01_t1 0.027 -0.012 0.067 0.090 1.354 0.176
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.192 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.000 1.000

Correlation of general acceptance goal with openness change score (current personality) is not significantly different from zero, r = 0.09, p = 0.176.

6.5.1.18 Openness - ideal personality: general acceptance goals

Fit model:

Show the code
# adding correlation with manifest acceptance goal variable to the latent change score model:
# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ sa06_01_t1     # estimates the covariance/correlation with acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa06_01_t1 ~~ sa06_01_t1
sa06_01_t1 ~ 1
'
fit_mi_lcs_openn_ideal_hyp5 <- lavaan(mi_lcs_openn_ideal_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing="fiml")
summary(fit_mi_lcs_openn_ideal_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 18 4114.748 4184.035 0.965 0.064 0.057
# parameters of interest
params_lcs_openn_ideal_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.967 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.639 NA NA
d_openn_1 ~1 -0.013 -0.053 0.027 -0.056 -0.646 0.519
openn_t1 ~1 3.811 3.752 3.870 10.661 126.436 0.000
d_openn_1 ~~ d_openn_1 0.056 0.029 0.083 1.000 4.028 0.000
openn_t1 ~~ d_openn_1 -0.023 -0.040 -0.007 -0.278 -2.764 0.006
d_openn_1 ~~ sa06_01_t1 0.002 -0.033 0.036 0.007 0.088 0.930
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.001 1.000

Correlation of general acceptance goal with openness change score (ideal personality) is not significantly different from zero, r = 0.007, p = 0.93.

6.5.1.19 Openness - current personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_curr_specif_hyp5 <- '
openn_t1 =~ 1*openn_curr_par1_t1 + lamb2*openn_curr_par2_t1 + lamb3*openn_curr_par3_t1 # This specifies the measurement model for openn_t1
openn_t2 =~ 1*openn_curr_par1_t2 + lamb2*openn_curr_par2_t2 + lamb3*openn_curr_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_curr_par1_t1 ~~ openn_curr_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_curr_par2_t1 ~~ openn_curr_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_curr_par3_t1 ~~ openn_curr_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_curr_par1_t1 ~~ res1*openn_curr_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_curr_par2_t1 ~~ res2*openn_curr_par2_t1   # This allows residual variance on indicator X2 at T1
openn_curr_par3_t1 ~~ res3*openn_curr_par3_t1   # This allows residual variance on indicator X3 at T1

openn_curr_par1_t2 ~~ res1*openn_curr_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_curr_par2_t2 ~~ res2*openn_curr_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_curr_par3_t2 ~~ res3*openn_curr_par3_t2  # This allows residual variance on indicator X3 at T2

openn_curr_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_curr_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_curr_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_curr_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_curr_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_curr_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_curr_specif_hyp5 <- lavaan(mi_lcs_openn_curr_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')

summary(fit_mi_lcs_openn_curr_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5986.862 6083.095 0.962 0.073 0.148
# parameters of interest
params_lcs_openn_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.065 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.608 NA NA
d_openn_1 ~1 0.075 0.031 0.120 0.245 3.306 0.001
openn_t1 ~1 3.474 3.399 3.549 6.466 90.990 0.000
d_openn_1 ~~ d_openn_1 0.094 0.056 0.132 1.000 4.792 0.000
openn_t1 ~~ d_openn_1 -0.064 -0.097 -0.032 -0.390 -3.855 0.000
goals ~~ d_openn_1 -0.010 -0.036 0.016 -0.059 -0.747 0.455
goals ~~ goals 0.308 0.186 0.430 1.000 4.945 0.000

Correlation of specific, facet-level acceptance goals with openness change score (current personality) is not significantly different from zero, r = -0.059, p = 0.455.

6.5.1.20 Openness - ideal personality: specific, facet-level acceptance goals

Fit model:

Show the code
# adding correlation with latent (made up of the three facets) acceptance goal variable to the latent change score model:

# Fit the multiple indicator univariate latent change score model
mi_lcs_openn_ideal_specif_hyp5 <- '
openn_t1 =~ 1*openn_ideal_par1_t1 + lamb2*openn_ideal_par2_t1 + lamb3*openn_ideal_par3_t1 # This specifies the measurement model for openn_t1 
openn_t2 =~ 1*openn_ideal_par1_t2 + lamb2*openn_ideal_par2_t2 + lamb3*openn_ideal_par3_t2 # This specifies the measurement model for openn_t2 with the equality constrained factor loadings

goals =~ 1*sa07_13_t1 + sa07_14_t1 + sa07_15_t1 # latent acceptance goal variable (three facets per trait)

openn_t2 ~ 1*openn_t1     # This parameter regresses openn_t2 perfectly on openn_t1
d_openn_1 =~ 1*openn_t2   # This defines the latent change score factor as measured perfectly by scores on openn_t2
openn_t2 ~ 0*1            # This line constrains the intercept of openn_t2 to 0
openn_t2 ~~ 0*openn_t2    # This fixes the variance of openn_t2 to 0

d_openn_1 ~ 1              # This estimates the intercept of the change score 
openn_t1 ~ 1               # This estimates the intercept of openn_t1 
d_openn_1 ~~ d_openn_1     # This estimates the variance of the change scores 
openn_t1 ~~ openn_t1       # This estimates the variance of the openn_t1 
openn_t1 ~~ d_openn_1       # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_openn_1 ~~ goals     # estimates the covariance/correlation with the (latent) acceptance goal variable
goals ~ 0*1            # This fixes the intercept of the (latent) acceptance goal variable to 0
goals ~~ goals         # This estimates the variance of the (latent) acceptance goal variable

openn_ideal_par1_t1 ~~ openn_ideal_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
openn_ideal_par2_t1 ~~ openn_ideal_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
openn_ideal_par3_t1 ~~ openn_ideal_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

openn_ideal_par1_t1 ~~ res1*openn_ideal_par1_t1   # This allows residual variance on indicator X1 at T1 
openn_ideal_par2_t1 ~~ res2*openn_ideal_par2_t1   # This allows residual variance on indicator X2 at T1
openn_ideal_par3_t1 ~~ res3*openn_ideal_par3_t1   # This allows residual variance on indicator X3 at T1

openn_ideal_par1_t2 ~~ res1*openn_ideal_par1_t2  # This allows residual variance on indicator X1 at T2 
openn_ideal_par2_t2 ~~ res2*openn_ideal_par2_t2  # This allows residual variance on indicator X2 at T2 
openn_ideal_par3_t2 ~~ res3*openn_ideal_par3_t2  # This allows residual variance on indicator X3 at T2

openn_ideal_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
openn_ideal_par2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
openn_ideal_par3_t1 ~ m3*1     # This estimates the intercept of X3 at T1

openn_ideal_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
openn_ideal_par2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
openn_ideal_par3_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa07_13_t1 ~~ sa07_13_t1
sa07_14_t1 ~~ sa07_14_t1
sa07_15_t1 ~~ sa07_15_t1

sa07_13_t1 ~ 1
sa07_14_t1 ~ 1
sa07_15_t1 ~ 1
'
fit_mi_lcs_openn_ideal_specif_hyp5 <- lavaan(mi_lcs_openn_ideal_specif_hyp5, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing = "fiml")
summary(fit_mi_lcs_openn_ideal_specif_hyp5, fit.measures=TRUE, standardized=TRUE, rsquare=F)

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 25 5720.298 5816.531 0.986 0.038 0.052
# parameters of interest
params_lcs_openn_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "goals ~~ d_openn_1", "goals ~~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.967 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.639 NA NA
d_openn_1 ~1 -0.013 -0.053 0.026 -0.056 -0.656 0.512
openn_t1 ~1 3.811 3.752 3.870 10.656 126.434 0.000
d_openn_1 ~~ d_openn_1 0.056 0.028 0.083 1.000 3.988 0.000
openn_t1 ~~ d_openn_1 -0.024 -0.040 -0.007 -0.279 -2.788 0.005
goals ~~ d_openn_1 -0.002 -0.023 0.019 -0.016 -0.193 0.847
goals ~~ goals 0.307 0.185 0.429 1.000 4.940 0.000

The correlation of specific, facet-level acceptance goals with the openness change score (ideal personality) is not significantly different from zero, r = -0.016, p = 0.847.

6.5.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create template:
facet_template <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

d_facet_1 ~~ ind_goal     # estimates the covariance/correlation with acceptance goal variable

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # loop across 2 BFI versions (combined pre&post current/ideal)
  for (j in 5:length(bfi_versions)) {
    items = paste0(bfi_versions[[j]], item_nrs)
    # loop across 2 different goal operationalizations (sa06_01_t1 & sa07_XX_t1)
    for (k in 1:2) {
      if (k==1) {
        goal_op = "sa06_01_t1"
      } else{
        goal_op = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
      }
      template_filled <- str_replace_all(facet_template, 
                                         c("facet" = short_name,
                                           "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                           "ind_goal" = goal_op))
      facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa, estimator='mlr', fixed.x=FALSE, missing='fiml')
      # save to environment
      if (k==1) {
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_hyp5")), facet_model_fit))
      } else{
        eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), template_filled))
        eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                       str_sub(names(bfi_versions)[j], 6), "_specif_hyp5")), facet_model_fit))
      }
    }
  }
}  
6.5.2.1 Sociability - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8200.765 8285.45 0.974 0.058 0.048
# parameters of interest
params_lcs_socia_curr_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.013 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.423 NA NA
d_socia_1 ~1 0.175 0.104 0.245 0.475 4.859 0.000
socia_t1 ~1 2.825 2.693 2.956 3.206 42.175 0.000
d_socia_1 ~~ d_socia_1 0.135 0.065 0.205 1.000 3.788 0.000
socia_t1 ~~ d_socia_1 -0.077 -0.142 -0.012 -0.238 -2.334 0.020
d_socia_1 ~~ sa06_01_t1 0.096 0.038 0.153 0.260 3.243 0.001
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 -0.003 -0.109 0.104 -0.003 -0.049 0.961

The correlation of the general acceptance goal with the sociability change score (current personality) is significantly different from zero, r = 0.26, p = 0.001.

6.5.2.2 Sociability - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8107.966 8192.651 0.966 0.04 0.048
# parameters of interest
params_lcs_socia_ideal_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.048 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.745 NA NA
d_socia_1 ~1 -0.058 -0.107 -0.009 -0.230 -2.342 0.019
socia_t1 ~1 4.321 4.250 4.393 12.165 118.382 0.000
d_socia_1 ~~ d_socia_1 0.064 0.018 0.110 1.000 2.714 0.007
socia_t1 ~~ d_socia_1 -0.037 -0.063 -0.012 -0.418 -2.930 0.003
d_socia_1 ~~ sa06_01_t1 -0.014 -0.048 0.021 -0.054 -0.767 0.443
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.003 0.998

Correlation of general acceptance goal with sociability change score (ideal personality) is not significantly different from zero, r = -0.054, p = 0.443.

6.5.2.3 Sociability - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8210.829 8295.514 0.918 0.107 0.141
# parameters of interest
params_lcs_socia_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.023 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.434 NA NA
d_socia_1 ~1 0.172 0.102 0.242 0.463 4.806 0.000
socia_t1 ~1 2.826 2.694 2.957 3.225 42.204 0.000
d_socia_1 ~~ d_socia_1 0.138 0.068 0.207 1.000 3.883 0.000
socia_t1 ~~ d_socia_1 -0.086 -0.157 -0.015 -0.265 -2.377 0.017
d_socia_1 ~~ sa07_01_t1 0.001 -0.065 0.067 0.004 0.039 0.969
sa07_01_t1 ~~ sa07_01_t1 0.997 0.896 1.098 1.000 19.269 0.000

Correlation of specific, facet-level acceptance goals with sociability change score (current personality) is not significantly different from zero, r = 0.004, p = 0.969.

6.5.2.4 Sociability - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8108.332 8193.017 0.953 0.047 0.051
# parameters of interest
params_lcs_socia_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", # acceptance goals
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.047 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.743 NA NA
d_socia_1 ~1 -0.058 -0.107 -0.009 -0.229 -2.330 0.020
socia_t1 ~1 4.321 4.250 4.393 12.038 118.246 0.000
d_socia_1 ~~ d_socia_1 0.065 0.018 0.112 1.000 2.691 0.007
socia_t1 ~~ d_socia_1 -0.038 -0.063 -0.013 -0.416 -2.944 0.003
d_socia_1 ~~ sa07_01_t1 -0.006 -0.054 0.041 -0.025 -0.262 0.793
sa07_01_t1 ~~ sa07_01_t1 0.997 0.896 1.098 1.000 19.269 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal personality) is not significantly different from zero, r = -0.025, p = 0.793.

6.5.2.5 Assertiveness - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8581.881 8666.566 0.979 0.044 0.043
# parameters of interest
params_lcs_asser_curr_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.027 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.559 NA NA
d_asser_1 ~1 0.083 0.026 0.141 0.235 2.826 0.005
asser_t1 ~1 3.132 3.019 3.245 4.798 54.210 0.000
d_asser_1 ~~ d_asser_1 0.126 0.067 0.185 1.000 4.169 0.000
asser_t1 ~~ d_asser_1 -0.074 -0.120 -0.028 -0.320 -3.162 0.002
d_asser_1 ~~ sa06_01_t1 0.061 0.012 0.110 0.171 2.425 0.015
sa06_01_t1 ~~ sa06_01_t1 0.998 0.806 1.190 1.000 10.184 0.000
sa06_01_t1 ~1 0.003 -0.103 0.109 0.003 0.054 0.957

Correlation of general acceptance goal with assertiveness change score (current personality) is significantly different from zero, r = 0.171, p = 0.015.

6.5.2.6 Assertiveness - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8366.32 8451.005 0.99 0.021 0.039
# parameters of interest
params_lcs_asser_ideal_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.015 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.754 NA NA
d_asser_1 ~1 -0.034 -0.071 0.003 -0.167 -1.790 0.074
asser_t1 ~1 4.163 4.072 4.254 15.355 89.784 0.000
d_asser_1 ~~ d_asser_1 0.041 0.003 0.078 1.000 2.137 0.033
asser_t1 ~~ d_asser_1 -0.021 -0.044 0.001 -0.391 -1.849 0.064
d_asser_1 ~~ sa06_01_t1 0.016 -0.015 0.048 0.082 1.023 0.306
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.003 0.998

Correlation of general acceptance goal with assertiveness change score (ideal personality) is not significantly different from zero, r = 0.082, p = 0.306.

6.5.2.7 Assertiveness - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8587.206 8671.891 0.919 0.088 0.103
# parameters of interest
params_lcs_asser_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.036 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.569 NA NA
d_asser_1 ~1 0.084 0.025 0.142 0.231 2.793 0.005
asser_t1 ~1 3.132 3.018 3.245 4.759 54.144 0.000
d_asser_1 ~~ d_asser_1 0.131 0.068 0.194 1.000 4.098 0.000
asser_t1 ~~ d_asser_1 -0.080 -0.131 -0.029 -0.336 -3.052 0.002
d_asser_1 ~~ sa07_02_t1 -0.008 -0.066 0.051 -0.021 -0.253 0.800
sa07_02_t1 ~~ sa07_02_t1 0.997 0.899 1.095 1.000 19.964 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (current personality) is not significantly different from zero, r = -0.021, p = 0.8.

6.5.2.8 Assertiveness - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8366.477 8451.162 0.996 0.013 0.037
# parameters of interest
params_lcs_asser_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", # acceptance goals
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.008 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.742 NA NA
d_asser_1 ~1 -0.034 -0.071 0.003 -0.169 -1.789 0.074
asser_t1 ~1 4.163 4.072 4.254 15.223 89.911 0.000
d_asser_1 ~~ d_asser_1 0.041 0.004 0.077 1.000 2.154 0.031
asser_t1 ~~ d_asser_1 -0.021 -0.043 0.002 -0.379 -1.820 0.069
d_asser_1 ~~ sa07_02_t1 -0.016 -0.050 0.019 -0.077 -0.893 0.372
sa07_02_t1 ~~ sa07_02_t1 0.997 0.899 1.095 1.000 19.966 0.000

Correlation of specific, facet-level acceptance goals with assertiveness change score (ideal personality) is not significantly different from zero, r = -0.077, p = 0.372.

6.5.2.9 Energy - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8651.452 8736.137 0.961 0.057 0.053
# parameters of interest
params_lcs_energ_curr_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.037 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.665 NA NA
d_energ_1 ~1 0.107 0.048 0.166 0.334 3.532 0.000
energ_t1 ~1 3.314 3.208 3.419 6.639 61.320 0.000
d_energ_1 ~~ d_energ_1 0.103 0.034 0.171 1.000 2.933 0.003
energ_t1 ~~ d_energ_1 -0.060 -0.103 -0.017 -0.375 -2.724 0.006
d_energ_1 ~~ sa06_01_t1 0.020 -0.020 0.061 0.063 0.985 0.325
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.107 0.000 0.006 0.995

Correlation of general acceptance goal with energy change score (current personality) is not significantly different from zero, r = 0.063, p = 0.325.

6.5.2.10 Energy - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7724.28 7808.965 0.909 0.05 0.062
# parameters of interest
params_lcs_energ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.109 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.941 NA NA
d_energ_1 ~1 0.013 -0.034 0.059 0.053 0.544 0.587
energ_t1 ~1 3.608 3.492 3.724 12.658 60.880 0.000
d_energ_1 ~~ d_energ_1 0.058 -0.033 0.150 1.000 1.246 0.213
energ_t1 ~~ d_energ_1 -0.037 -0.102 0.029 -0.534 -1.102 0.271
d_energ_1 ~~ sa06_01_t1 0.030 -0.009 0.069 0.124 1.512 0.130
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.001 -0.106 0.107 0.001 0.013 0.990

Correlation of general acceptance goal with energy change score (ideal personality) is not significantly different from zero, r = 0.124, p = 0.13.

6.5.2.11 Energy - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8650.063 8734.748 0.867 0.112 0.131
# parameters of interest
params_lcs_energ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.073 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.717 NA NA
d_energ_1 ~1 0.106 0.047 0.164 0.317 3.521 0.000
energ_t1 ~1 3.314 3.208 3.420 6.655 61.379 0.000
d_energ_1 ~~ d_energ_1 0.111 0.036 0.185 1.000 2.902 0.004
energ_t1 ~~ d_energ_1 -0.072 -0.124 -0.020 -0.432 -2.696 0.007
d_energ_1 ~~ sa07_03_t1 -0.039 -0.094 0.016 -0.116 -1.373 0.170
sa07_03_t1 ~~ sa07_03_t1 0.997 0.900 1.094 1.000 20.238 0.000

Correlation of specific, facet-level acceptance goals with energy change score (current personality) is not significantly different from zero, r = -0.116, p = 0.17.

6.5.2.12 Energy - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7724.397 7809.082 0.904 0.052 0.063
# parameters of interest
params_lcs_energ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", # acceptance goals
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.095 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.914 NA NA
d_energ_1 ~1 0.011 -0.034 0.057 0.049 0.493 0.622
energ_t1 ~1 3.608 3.492 3.724 12.716 60.919 0.000
d_energ_1 ~~ d_energ_1 0.056 -0.031 0.143 1.000 1.257 0.209
energ_t1 ~~ d_energ_1 -0.035 -0.097 0.027 -0.517 -1.095 0.273
d_energ_1 ~~ sa07_03_t1 -0.030 -0.071 0.011 -0.126 -1.420 0.156
sa07_03_t1 ~~ sa07_03_t1 0.997 0.900 1.094 1.000 20.239 0.000

Correlation of specific, facet-level acceptance goals with energy change score (ideal personality) is not significantly different from zero, r = -0.126, p = 0.156.

6.5.2.13 Compassion - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8551.603 8636.288 0.935 0.062 0.064
# parameters of interest
params_lcs_compa_curr_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.143 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.748 NA NA
d_compa_1 ~1 0.086 -0.004 0.175 0.162 1.873 0.061
compa_t1 ~1 4.135 4.034 4.236 5.114 80.387 0.000
d_compa_1 ~~ d_compa_1 0.280 0.085 0.475 1.000 2.813 0.005
compa_t1 ~~ d_compa_1 -0.217 -0.374 -0.060 -0.506 -2.705 0.007
d_compa_1 ~~ sa06_01_t1 0.065 -0.023 0.152 0.122 1.452 0.147
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.107 0.106 0.000 -0.008 0.993

Correlation of general acceptance goal with compassion change score (current personality) is not significantly different from zero, r = 0.122, p = 0.147.

6.5.2.14 Compassion - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8752.132 8836.817 0.974 0.032 0.053
# parameters of interest
params_lcs_compa_ideal_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.020 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.592 NA NA
d_compa_1 ~1 -0.039 -0.110 0.032 -0.117 -1.082 0.279
compa_t1 ~1 4.255 4.163 4.347 7.356 90.728 0.000
d_compa_1 ~~ d_compa_1 0.113 0.003 0.222 1.000 2.020 0.043
compa_t1 ~~ d_compa_1 -0.063 -0.138 0.012 -0.324 -1.641 0.101
d_compa_1 ~~ sa06_01_t1 0.013 -0.051 0.077 0.039 0.402 0.688
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.002 0.998

Correlation of general acceptance goal with compassion change score (ideal personality) is not significantly different from zero, r = 0.039, p = 0.688.

6.5.2.15 Compassion - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8554.327 8639.012 0.927 0.066 0.068
# parameters of interest
params_lcs_compa_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.130 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.726 NA NA
d_compa_1 ~1 0.082 -0.005 0.170 0.161 1.837 0.066
compa_t1 ~1 4.136 4.036 4.236 5.205 80.767 0.000
d_compa_1 ~~ d_compa_1 0.261 0.082 0.439 1.000 2.860 0.004
compa_t1 ~~ d_compa_1 -0.199 -0.344 -0.054 -0.490 -2.688 0.007
d_compa_1 ~~ sa07_04_t1 -0.020 -0.090 0.049 -0.040 -0.574 0.566
sa07_04_t1 ~~ sa07_04_t1 0.997 0.891 1.103 1.000 18.465 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (current personality) is not significantly different from zero, r = -0.04, p = 0.566.

6.5.2.16 Compassion - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8747.745 8832.43 1 0 0.032
# parameters of interest
params_lcs_compa_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", # acceptance goals
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.020 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.594 NA NA
d_compa_1 ~1 -0.039 -0.110 0.032 -0.117 -1.085 0.278
compa_t1 ~1 4.255 4.163 4.347 7.382 90.696 0.000
d_compa_1 ~~ d_compa_1 0.113 0.004 0.221 1.000 2.039 0.041
compa_t1 ~~ d_compa_1 -0.063 -0.133 0.008 -0.324 -1.738 0.082
d_compa_1 ~~ sa07_04_t1 -0.068 -0.135 -0.001 -0.203 -1.988 0.047
sa07_04_t1 ~~ sa07_04_t1 0.997 0.891 1.103 1.000 18.464 0.000

Correlation of specific, facet-level acceptance goals with compassion change score (ideal personality) is not significantly different from zero, r = -0.203, p = 0.047.

6.5.2.17 Respectfulness - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7555.305 7639.991 0.938 0.07 0.062
# parameters of interest
params_lcs_respe_curr_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.020 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.601 NA NA
d_respe_1 ~1 0.055 0.009 0.102 0.199 2.318 0.020
respe_t1 ~1 4.436 4.365 4.506 9.393 122.932 0.000
d_respe_1 ~~ d_respe_1 0.077 0.029 0.125 1.000 3.163 0.002
respe_t1 ~~ d_respe_1 -0.043 -0.080 -0.006 -0.327 -2.258 0.024
d_respe_1 ~~ sa06_01_t1 0.013 -0.034 0.060 0.047 0.539 0.590
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.003 0.998

Correlation of general acceptance goal with respectfulness change score (current personality) is not significantly different from zero, r = 0.047, p = 0.59.

6.5.2.18 Respectfulness - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7028.896 7113.581 0.9 0.072 0.074
# parameters of interest
params_lcs_respe_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.959 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.673 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.312 0.755
respe_t1 ~1 4.672 4.613 4.731 13.653 156.301 0.000
d_respe_1 ~~ d_respe_1 0.058 0.014 0.101 1.000 2.601 0.009
respe_t1 ~~ d_respe_1 -0.024 -0.057 0.010 -0.288 -1.389 0.165
d_respe_1 ~~ sa06_01_t1 0.012 -0.027 0.051 0.052 0.624 0.533
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.001 0.999

Correlation of general acceptance goal with respectfulness change score (ideal personality) is not significantly different from zero, r = 0.052, p = 0.533.

6.5.2.19 Respectfulness - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7555.467 7640.152 0.906 0.088 0.099
# parameters of interest
params_lcs_respe_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.009 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.587 NA NA
d_respe_1 ~1 0.055 0.008 0.102 0.200 2.313 0.021
respe_t1 ~1 4.436 4.365 4.506 9.386 122.943 0.000
d_respe_1 ~~ d_respe_1 0.076 0.029 0.123 1.000 3.157 0.002
respe_t1 ~~ d_respe_1 -0.040 -0.078 -0.002 -0.307 -2.060 0.039
d_respe_1 ~~ sa07_05_t1 0.010 -0.041 0.061 0.037 0.388 0.698
sa07_05_t1 ~~ sa07_05_t1 0.997 0.833 1.161 1.000 11.923 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (current personality) is not significantly different from zero, r = 0.037, p = 0.698.

6.5.2.20 Respectfulness - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7029.146 7113.831 0.925 0.061 0.063
# parameters of interest
params_lcs_respe_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", # acceptance goals
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.956 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.667 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.309 0.758
respe_t1 ~1 4.672 4.613 4.731 13.634 156.255 0.000
d_respe_1 ~~ d_respe_1 0.057 0.014 0.100 1.000 2.588 0.010
respe_t1 ~~ d_respe_1 -0.023 -0.056 0.010 -0.281 -1.365 0.172
d_respe_1 ~~ sa07_05_t1 -0.007 -0.051 0.037 -0.030 -0.315 0.753
sa07_05_t1 ~~ sa07_05_t1 0.997 0.833 1.161 1.000 11.923 0.000

Correlation of specific, facet-level acceptance goals with respectfulness change score (ideal personality) is not significantly different from zero, r = -0.03, p = 0.753.

6.5.2.21 Trust - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8685.783 8770.468 0.966 0.049 0.054
# parameters of interest
params_lcs_trust_curr_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.053 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.538 NA NA
d_trust_1 ~1 0.083 0.019 0.147 0.258 2.532 0.011
trust_t1 ~1 3.106 2.991 3.221 4.950 52.892 0.000
d_trust_1 ~~ d_trust_1 0.103 0.004 0.202 1.000 2.035 0.042
trust_t1 ~~ d_trust_1 -0.071 -0.135 -0.007 -0.352 -2.170 0.030
d_trust_1 ~~ sa06_01_t1 0.020 -0.035 0.075 0.063 0.717 0.473
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.004 0.997

Correlation of general acceptance goal with trust change score (current personality) is not significantly different from zero, r = 0.063, p = 0.473.

6.5.2.22 Trust - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8350.691 8435.376 0.936 0.056 0.058
# parameters of interest
params_lcs_trust_ideal_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.998 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.669 NA NA
d_trust_1 ~1 -0.029 -0.084 0.025 -0.100 -1.050 0.294
trust_t1 ~1 4.095 4.001 4.189 9.343 85.175 0.000
d_trust_1 ~~ d_trust_1 0.086 0.032 0.141 1.000 3.091 0.002
trust_t1 ~~ d_trust_1 -0.043 -0.082 -0.003 -0.332 -2.127 0.033
d_trust_1 ~~ sa06_01_t1 0.048 -0.002 0.099 0.164 1.867 0.062
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 -0.002 -0.108 0.105 -0.002 -0.032 0.974

Correlation of general acceptance goal with trust change score (ideal personality) is not significantly different from zero, r = 0.164, p = 0.062.

6.5.2.23 Trust - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8684.944 8769.63 0.958 0.056 0.066
# parameters of interest
params_lcs_trust_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.057 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.546 NA NA
d_trust_1 ~1 0.081 0.018 0.144 0.252 2.505 0.012
trust_t1 ~1 3.107 2.992 3.222 5.014 52.887 0.000
d_trust_1 ~~ d_trust_1 0.102 0.007 0.198 1.000 2.101 0.036
trust_t1 ~~ d_trust_1 -0.071 -0.133 -0.010 -0.360 -2.289 0.022
d_trust_1 ~~ sa07_06_t1 -0.033 -0.085 0.020 -0.102 -1.213 0.225
sa07_06_t1 ~~ sa07_06_t1 0.997 0.901 1.093 1.000 20.379 0.000

Correlation of specific, facet-level acceptance goals with trust change score (current personality) is not significantly different from zero, r = -0.102, p = 0.225.

6.5.2.24 Trust - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8354.315 8439 0.957 0.046 0.044
# parameters of interest
params_lcs_trust_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", # acceptance goals
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.980 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.640 NA NA
d_trust_1 ~1 -0.030 -0.084 0.024 -0.106 -1.081 0.280
trust_t1 ~1 4.095 4.001 4.189 9.467 85.267 0.000
d_trust_1 ~~ d_trust_1 0.080 0.029 0.131 1.000 3.073 0.002
trust_t1 ~~ d_trust_1 -0.036 -0.072 0.000 -0.295 -1.957 0.050
d_trust_1 ~~ sa07_06_t1 -0.007 -0.056 0.042 -0.025 -0.281 0.779
sa07_06_t1 ~~ sa07_06_t1 0.997 0.901 1.093 1.000 20.381 0.000

Correlation of specific, facet-level acceptance goals with trust change score (ideal personality) is not significantly different from zero, r = -0.025, p = 0.779.

6.5.2.25 Organization - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8297.217 8381.902 0.978 0.056 0.034
# parameters of interest
params_lcs_organ_curr_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.054 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.475 NA NA
d_organ_1 ~1 0.143 0.069 0.217 0.303 3.782 0.000
organ_t1 ~1 3.042 2.901 3.182 2.909 42.438 0.000
d_organ_1 ~~ d_organ_1 0.223 0.127 0.318 1.000 4.548 0.000
organ_t1 ~~ d_organ_1 -0.165 -0.247 -0.084 -0.335 -3.994 0.000
d_organ_1 ~~ sa06_01_t1 0.004 -0.059 0.067 0.009 0.133 0.894
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.107 0.000 0.001 0.999

Correlation of general acceptance goal with organization change score (current personality) is not significantly different from zero, r = 0.009, p = 0.894.

6.5.2.26 Organization - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7229.398 7314.083 0.918 0.058 0.06
# parameters of interest
params_lcs_organ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.035 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.821 NA NA
d_organ_1 ~1 -0.001 -0.033 0.031 -0.005 -0.064 0.949
organ_t1 ~1 4.304 4.215 4.393 16.928 94.790 0.000
d_organ_1 ~~ d_organ_1 0.041 0.002 0.080 1.000 2.051 0.040
organ_t1 ~~ d_organ_1 -0.022 -0.043 -0.002 -0.438 -2.118 0.034
d_organ_1 ~~ sa06_01_t1 -0.007 -0.035 0.020 -0.037 -0.528 0.598
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.007 0.995

Correlation of general acceptance goal with organization change score (ideal personality) is not significantly different from zero, r = -0.037, p = 0.598.

6.5.2.27 Organization - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8291.204 8375.889 0.878 0.138 0.174
# parameters of interest
params_lcs_organ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.113 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.547 NA NA
d_organ_1 ~1 0.141 0.067 0.216 0.275 3.732 0.000
organ_t1 ~1 3.042 2.901 3.182 2.907 42.443 0.000
d_organ_1 ~~ d_organ_1 0.264 0.146 0.382 1.000 4.396 0.000
organ_t1 ~~ d_organ_1 -0.237 -0.344 -0.130 -0.442 -4.350 0.000
d_organ_1 ~~ sa07_07_t1 -0.108 -0.198 -0.019 -0.211 -2.380 0.017
sa07_07_t1 ~~ sa07_07_t1 0.997 0.918 1.075 1.000 24.910 0.000

The correlation of specific, facet-level acceptance goals with the organization change score (current personality) is significantly different from zero, r = -0.211, p = 0.017.

6.5.2.28 Organization - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7229.179 7313.865 0.926 0.055 0.06
# parameters of interest
params_lcs_organ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", # acceptance goals
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.041 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.837 NA NA
d_organ_1 ~1 -0.001 -0.033 0.031 -0.005 -0.063 0.950
organ_t1 ~1 4.304 4.215 4.393 16.895 94.782 0.000
d_organ_1 ~~ d_organ_1 0.042 0.002 0.082 1.000 2.053 0.040
organ_t1 ~~ d_organ_1 -0.023 -0.045 -0.002 -0.450 -2.132 0.033
d_organ_1 ~~ sa07_07_t1 -0.010 -0.038 0.018 -0.050 -0.704 0.481
sa07_07_t1 ~~ sa07_07_t1 0.997 0.919 1.076 1.000 24.902 0.000

Correlation of specific, facet-level acceptance goals with organization change score (ideal personality) is not significantly different from zero, r = -0.05, p = 0.481.

6.5.2.29 Productiveness - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8334.348 8419.033 0.985 0.04 0.038
# parameters of interest
params_lcs_produ_curr_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.982 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.430 NA NA
d_produ_1 ~1 0.203 0.132 0.274 0.559 5.629 0.000
produ_t1 ~1 2.539 2.411 2.667 3.063 38.956 0.000
d_produ_1 ~~ d_produ_1 0.132 0.055 0.209 1.000 3.348 0.001
produ_t1 ~~ d_produ_1 -0.054 -0.118 0.011 -0.178 -1.630 0.103
d_produ_1 ~~ sa06_01_t1 0.024 -0.031 0.080 0.067 0.868 0.386
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.107 0.000 0.008 0.994

Correlation of general acceptance goal with productiveness change score (current personality) is not significantly different from zero, r = 0.067, p = 0.386.

6.5.2.30 Productiveness - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6730.343 6815.028 0.867 0.071 0.071
# parameters of interest
params_lcs_produ_ideal_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.086 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.748 NA NA
d_produ_1 ~1 0.026 -0.025 0.078 0.097 1.005 0.315
produ_t1 ~1 4.388 4.311 4.464 11.090 112.394 0.000
d_produ_1 ~~ d_produ_1 0.074 0.013 0.136 1.000 2.369 0.018
produ_t1 ~~ d_produ_1 -0.049 -0.099 0.001 -0.455 -1.923 0.055
d_produ_1 ~~ sa06_01_t1 0.012 -0.027 0.052 0.046 0.619 0.536
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.002 0.998

Correlation of general acceptance goal with productiveness change score (ideal personality) is not significantly different from zero, r = 0.046, p = 0.536.

6.5.2.31 Productiveness - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8331.591 8416.276 0.89 0.115 0.153
# parameters of interest
params_lcs_produ_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.026 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.478 NA NA
d_produ_1 ~1 0.201 0.131 0.271 0.520 5.611 0.000
produ_t1 ~1 2.540 2.412 2.667 3.071 38.986 0.000
d_produ_1 ~~ d_produ_1 0.149 0.059 0.238 1.000 3.248 0.001
produ_t1 ~~ d_produ_1 -0.092 -0.172 -0.011 -0.287 -2.235 0.025
d_produ_1 ~~ sa07_08_t1 -0.070 -0.146 0.006 -0.182 -1.798 0.072
sa07_08_t1 ~~ sa07_08_t1 0.997 0.905 1.090 1.000 21.143 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (current personality) is not significantly different from zero, r = -0.182, p = 0.072.

6.5.2.32 Productiveness - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6730.59 6815.275 0.88 0.067 0.066
# parameters of interest
params_lcs_produ_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", # acceptance goals
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.085 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.742 NA NA
d_produ_1 ~1 0.026 -0.025 0.078 0.097 0.998 0.318
produ_t1 ~1 4.388 4.311 4.464 11.064 112.340 0.000
d_produ_1 ~~ d_produ_1 0.074 0.012 0.135 1.000 2.360 0.018
produ_t1 ~~ d_produ_1 -0.049 -0.098 0.001 -0.452 -1.912 0.056
d_produ_1 ~~ sa07_08_t1 -0.006 -0.046 0.034 -0.021 -0.281 0.779
sa07_08_t1 ~~ sa07_08_t1 0.997 0.905 1.089 1.000 21.143 0.000

Correlation of specific, facet-level acceptance goals with productiveness change score (ideal personality) is not significantly different from zero, r = -0.021, p = 0.779.

6.5.2.33 Responsibility - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8379.151 8463.836 0.913 0.083 0.079
# parameters of interest
params_lcs_respo_curr_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.012 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.397 NA NA
d_respo_1 ~1 0.119 0.055 0.183 0.458 3.649 0.000
respo_t1 ~1 3.622 3.519 3.724 5.455 69.260 0.000
d_respo_1 ~~ d_respo_1 0.068 0.007 0.128 1.000 2.204 0.028
respo_t1 ~~ d_respo_1 -0.039 -0.095 0.016 -0.227 -1.388 0.165
d_respo_1 ~~ sa06_01_t1 0.038 -0.013 0.088 0.145 1.459 0.145
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.001 -0.106 0.107 0.001 0.011 0.991

Correlation of general acceptance goal with responsibility change score (current personality) is not significantly different from zero, r = 0.145, p = 0.145.

6.5.2.34 Responsibility - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7700.35 7785.035 0.98 0.029 0.048
# parameters of interest
params_lcs_respo_ideal_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.794 NA NA
d_respo_1 ~1 0.031 -0.034 0.096 0.080 0.921 0.357
respo_t1 ~1 4.275 4.175 4.375 8.429 83.548 0.000
d_respo_1 ~~ d_respo_1 0.146 0.036 0.256 1.000 2.598 0.009
respo_t1 ~~ d_respo_1 -0.086 -0.158 -0.013 -0.442 -2.319 0.020
d_respo_1 ~~ sa06_01_t1 0.014 -0.043 0.072 0.037 0.488 0.625
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.001 0.999

Correlation of general acceptance goal with responsibility change score (ideal personality) is not significantly different from zero, r = 0.037, p = 0.625.

6.5.2.35 Responsibility - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8371.78 8456.466 0.849 0.114 0.125
# parameters of interest
params_lcs_respo_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.058 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.453 NA NA
d_respo_1 ~1 0.120 0.056 0.183 0.420 3.701 0.000
respo_t1 ~1 3.621 3.519 3.724 5.442 69.342 0.000
d_respo_1 ~~ d_respo_1 0.081 0.017 0.146 1.000 2.470 0.013
respo_t1 ~~ d_respo_1 -0.064 -0.126 -0.002 -0.338 -2.027 0.043
d_respo_1 ~~ sa07_09_t1 -0.092 -0.157 -0.027 -0.322 -2.768 0.006
sa07_09_t1 ~~ sa07_09_t1 0.997 0.907 1.088 1.000 21.605 0.000

The correlation of specific, facet-level acceptance goals with the responsibility change score (current personality) is significantly different from zero, r = -0.322, p = 0.006.

6.5.2.36 Responsibility - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7699.488 7784.173 0.98 0.029 0.046
# parameters of interest
params_lcs_respo_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", # acceptance goals
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.792 NA NA
d_respo_1 ~1 0.030 -0.035 0.095 0.079 0.908 0.364
respo_t1 ~1 4.275 4.175 4.375 8.462 83.572 0.000
d_respo_1 ~~ d_respo_1 0.144 0.036 0.253 1.000 2.602 0.009
respo_t1 ~~ d_respo_1 -0.085 -0.155 -0.014 -0.442 -2.350 0.019
d_respo_1 ~~ sa07_09_t1 -0.030 -0.087 0.026 -0.080 -1.047 0.295
sa07_09_t1 ~~ sa07_09_t1 0.997 0.907 1.087 1.000 21.610 0.000

Correlation of specific, facet-level acceptance goals with responsibility change score (ideal personality) is not significantly different from zero, r = -0.08, p = 0.295.

6.5.2.37 Anxiety - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8758.216 8842.902 0.964 0.053 0.069
# parameters of interest
params_lcs_anxie_curr_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.951 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.510 NA NA
d_anxie_1 ~1 -0.204 -0.292 -0.115 -0.421 -4.511 0.000
anxie_t1 ~1 3.314 3.186 3.442 3.672 50.819 0.000
d_anxie_1 ~~ d_anxie_1 0.234 0.105 0.363 1.000 3.551 0.000
anxie_t1 ~~ d_anxie_1 -0.074 -0.169 0.021 -0.170 -1.529 0.126
d_anxie_1 ~~ sa06_01_t1 -0.065 -0.152 0.022 -0.134 -1.468 0.142
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.192 0.000
sa06_01_t1 ~1 0.000 -0.107 0.106 0.000 -0.005 0.996

Correlation of general acceptance goal with anxiety change score (current personality) is not significantly different from zero, r = -0.134, p = 0.142.

6.5.2.38 Anxiety - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8309.912 8394.597 0.906 0.044 0.048
# parameters of interest
params_lcs_anxie_ideal_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.864 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.771 NA NA
d_anxie_1 ~1 0.045 -0.011 0.100 0.181 1.588 0.112
anxie_t1 ~1 1.433 1.369 1.497 5.137 43.839 0.000
d_anxie_1 ~~ d_anxie_1 0.062 -0.028 0.152 1.000 1.350 0.177
anxie_t1 ~~ d_anxie_1 -0.018 -0.054 0.019 -0.256 -0.950 0.342
d_anxie_1 ~~ sa06_01_t1 -0.020 -0.064 0.025 -0.080 -0.875 0.382
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.192 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.001 0.999

Correlation of general acceptance goal with anxiety change score (ideal personality) is not significantly different from zero, r = -0.08, p = 0.382.

6.5.2.39 Anxiety - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8760.569 8845.254 0.92 0.081 0.103
# parameters of interest
params_lcs_anxie_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.963 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.524 NA NA
d_anxie_1 ~1 -0.202 -0.290 -0.114 -0.412 -4.500 0.000
anxie_t1 ~1 3.314 3.186 3.442 3.683 50.830 0.000
d_anxie_1 ~~ d_anxie_1 0.239 0.106 0.373 1.000 3.508 0.000
anxie_t1 ~~ d_anxie_1 -0.088 -0.184 0.008 -0.200 -1.793 0.073
d_anxie_1 ~~ sa07_10_t1 -0.008 -0.096 0.081 -0.016 -0.169 0.866
sa07_10_t1 ~~ sa07_10_t1 0.997 0.909 1.085 1.000 22.296 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (current personality) is not significantly different from zero, r = -0.016, p = 0.866.

6.5.2.40 Anxiety - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8310.441 8395.126 0.903 0.044 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", # acceptance goals
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.858 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.767 NA NA
d_anxie_1 ~1 0.046 -0.010 0.102 0.179 1.603 0.109
anxie_t1 ~1 1.432 1.368 1.497 4.993 43.716 0.000
d_anxie_1 ~~ d_anxie_1 0.066 -0.029 0.161 1.000 1.360 0.174
anxie_t1 ~~ d_anxie_1 -0.018 -0.058 0.022 -0.246 -0.892 0.373
d_anxie_1 ~~ sa07_10_t1 -0.010 -0.071 0.052 -0.037 -0.305 0.760
sa07_10_t1 ~~ sa07_10_t1 0.997 0.909 1.085 1.000 22.295 0.000

Correlation of specific, facet-level acceptance goals with anxiety change score (ideal personality) is not significantly different from zero, r = -0.037, p = 0.76.

6.5.2.41 Depression - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8520.932 8605.617 0.951 0.079 0.069
# parameters of interest
params_lcs_depre_curr_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.999 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.576 NA NA
d_depre_1 ~1 -0.198 -0.267 -0.129 -0.479 -5.645 0.000
depre_t1 ~1 3.037 2.912 3.163 4.235 47.379 0.000
d_depre_1 ~~ d_depre_1 0.171 0.094 0.248 1.000 4.359 0.000
depre_t1 ~~ d_depre_1 -0.085 -0.138 -0.032 -0.286 -3.134 0.002
d_depre_1 ~~ sa06_01_t1 -0.030 -0.081 0.021 -0.073 -1.152 0.249
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.192 0.000
sa06_01_t1 ~1 0.001 -0.106 0.107 0.001 0.013 0.990

Correlation of general acceptance goal with depression change score (current personality) is not significantly different from zero, r = -0.073, p = 0.249.

6.5.2.42 Depression - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6762.556 6847.241 0.83 0.081 0.073
# parameters of interest
params_lcs_depre_ideal_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.810 NA NA
d_depre_1 ~1 -0.018 -0.055 0.019 -0.081 -0.964 0.335
depre_t1 ~1 1.591 1.526 1.655 5.446 48.171 0.000
d_depre_1 ~~ d_depre_1 0.050 0.003 0.096 1.000 2.105 0.035
depre_t1 ~~ d_depre_1 -0.030 -0.059 -0.001 -0.455 -2.010 0.044
d_depre_1 ~~ sa06_01_t1 0.006 -0.024 0.036 0.028 0.408 0.684
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.003 0.998

Correlation of general acceptance goal with depression change score (ideal personality) is not significantly different from zero, r = 0.028, p = 0.684.

6.5.2.43 Depression - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8520.941 8605.626 0.91 0.11 0.123
# parameters of interest
params_lcs_depre_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.023 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.603 NA NA
d_depre_1 ~1 -0.197 -0.266 -0.129 -0.466 -5.658 0.000
depre_t1 ~1 3.037 2.912 3.163 4.237 47.374 0.000
d_depre_1 ~~ d_depre_1 0.179 0.095 0.263 1.000 4.183 0.000
depre_t1 ~~ d_depre_1 -0.101 -0.165 -0.036 -0.332 -3.066 0.002
d_depre_1 ~~ sa07_11_t1 0.033 -0.040 0.106 0.078 0.884 0.377
sa07_11_t1 ~~ sa07_11_t1 0.997 0.916 1.079 1.000 23.933 0.000

Correlation of specific, facet-level acceptance goals with depression change score (current personality) is not significantly different from zero, r = 0.078, p = 0.377.

6.5.2.44 Depression - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 6762.7 6847.385 0.824 0.082 0.074
# parameters of interest
params_lcs_depre_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", # acceptance goals
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.811 NA NA
d_depre_1 ~1 -0.018 -0.055 0.018 -0.081 -0.972 0.331
depre_t1 ~1 1.591 1.526 1.655 5.442 48.174 0.000
d_depre_1 ~~ d_depre_1 0.050 0.003 0.096 1.000 2.107 0.035
depre_t1 ~~ d_depre_1 -0.030 -0.059 -0.001 -0.456 -2.012 0.044
d_depre_1 ~~ sa07_11_t1 0.000 -0.033 0.033 0.001 0.010 0.992
sa07_11_t1 ~~ sa07_11_t1 0.997 0.915 1.079 1.000 23.939 0.000

Correlation of specific, facet-level acceptance goals with depression change score (ideal personality) is not significantly different from zero, r = 0.001, p = 0.992.

6.5.2.45 Volatility - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8563.24 8647.925 0.977 0.052 0.065
# parameters of interest
params_lcs_volat_curr_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.044 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.628 NA NA
d_volat_1 ~1 -0.143 -0.225 -0.062 -0.257 -3.456 0.001
volat_t1 ~1 3.223 3.091 3.354 3.469 48.034 0.000
d_volat_1 ~~ d_volat_1 0.312 0.170 0.455 1.000 4.293 0.000
volat_t1 ~~ d_volat_1 -0.192 -0.292 -0.092 -0.370 -3.759 0.000
d_volat_1 ~~ sa06_01_t1 -0.077 -0.155 0.001 -0.138 -1.923 0.054
sa06_01_t1 ~~ sa06_01_t1 0.998 0.806 1.190 1.000 10.180 0.000
sa06_01_t1 ~1 0.002 -0.104 0.108 0.002 0.041 0.968

Correlation of general acceptance goal with volatility change score (current personality) is not significantly different from zero, r = -0.138, p = 0.054.

6.5.2.46 Volatility - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7811.049 7895.734 0.97 0.031 0.045
# parameters of interest
params_lcs_volat_ideal_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.921 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.684 NA NA
d_volat_1 ~1 0.021 -0.041 0.083 0.066 0.667 0.505
volat_t1 ~1 1.704 1.623 1.785 3.950 41.190 0.000
d_volat_1 ~~ d_volat_1 0.102 0.024 0.181 1.000 2.564 0.010
volat_t1 ~~ d_volat_1 -0.035 -0.087 0.018 -0.251 -1.287 0.198
d_volat_1 ~~ sa06_01_t1 -0.060 -0.110 -0.010 -0.187 -2.338 0.019
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.002 0.999

The correlation of general acceptance goal with the volatility change score (ideal personality) is significantly different from zero, r = -0.187, p = 0.019.

6.5.2.47 Volatility - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8567.041 8651.726 0.964 0.065 0.076
# parameters of interest
params_lcs_volat_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.060 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.648 NA NA
d_volat_1 ~1 -0.142 -0.224 -0.061 -0.250 -3.426 0.001
volat_t1 ~1 3.223 3.091 3.354 3.466 48.022 0.000
d_volat_1 ~~ d_volat_1 0.323 0.174 0.472 1.000 4.243 0.000
volat_t1 ~~ d_volat_1 -0.209 -0.315 -0.103 -0.396 -3.876 0.000
d_volat_1 ~~ sa07_12_t1 -0.004 -0.091 0.083 -0.007 -0.085 0.932
sa07_12_t1 ~~ sa07_12_t1 0.997 0.891 1.103 1.000 18.422 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (current personality) is not significantly different from zero, r = -0.007, p = 0.932.

6.5.2.48 Volatility - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7814.84 7899.525 0.955 0.038 0.046
# parameters of interest
params_lcs_volat_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", # acceptance goals
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.911 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.666 NA NA
d_volat_1 ~1 0.022 -0.040 0.085 0.071 0.704 0.482
volat_t1 ~1 1.703 1.622 1.784 3.927 41.180 0.000
d_volat_1 ~~ d_volat_1 0.100 0.021 0.179 1.000 2.488 0.013
volat_t1 ~~ d_volat_1 -0.031 -0.084 0.022 -0.226 -1.145 0.252
d_volat_1 ~~ sa07_12_t1 -0.023 -0.077 0.032 -0.072 -0.815 0.415
sa07_12_t1 ~~ sa07_12_t1 0.997 0.891 1.103 1.000 18.422 0.000

Correlation of specific, facet-level acceptance goals with volatility change score (ideal personality) is not significantly different from zero, r = -0.072, p = 0.415.

6.5.2.49 Curiosity - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8344.104 8428.789 0.967 0.041 0.051
# parameters of interest
params_lcs_curio_curr_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.162 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.693 NA NA
d_curio_1 ~1 0.114 0.041 0.187 0.311 3.046 0.002
curio_t1 ~1 4.073 3.978 4.167 6.644 84.612 0.000
d_curio_1 ~~ d_curio_1 0.134 0.032 0.235 1.000 2.576 0.010
curio_t1 ~~ d_curio_1 -0.115 -0.214 -0.016 -0.515 -2.286 0.022
d_curio_1 ~~ sa06_01_t1 0.036 -0.023 0.094 0.097 1.197 0.231
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.193 0.000
sa06_01_t1 ~1 0.000 -0.107 0.106 0.000 -0.006 0.995

Correlation of general acceptance goal with curiosity change score (current personality) is not significantly different from zero, r = 0.097, p = 0.231.

6.5.2.50 Curiosity - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8254.168 8338.853 1 0 0.038
# parameters of interest
params_lcs_curio_ideal_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.048 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.694 NA NA
d_curio_1 ~1 0.014 -0.030 0.057 0.068 0.625 0.532
curio_t1 ~1 4.494 4.426 4.561 14.600 130.724 0.000
d_curio_1 ~~ d_curio_1 0.042 -0.006 0.090 1.000 1.696 0.090
curio_t1 ~~ d_curio_1 -0.025 -0.051 0.001 -0.399 -1.868 0.062
d_curio_1 ~~ sa06_01_t1 0.017 -0.018 0.052 0.084 0.961 0.336
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.190 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.002 0.998

Correlation of general acceptance goal with curiosity change score (ideal personality) is not significantly different from zero, r = 0.084, p = 0.336.

6.5.2.51 Curiosity - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8341.963 8426.648 0.904 0.073 0.085
# parameters of interest
params_lcs_curio_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.197 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.750 NA NA
d_curio_1 ~1 0.113 0.040 0.186 0.296 3.045 0.002
curio_t1 ~1 4.073 3.978 4.167 6.647 84.739 0.000
d_curio_1 ~~ d_curio_1 0.147 0.038 0.257 1.000 2.630 0.009
curio_t1 ~~ d_curio_1 -0.130 -0.236 -0.025 -0.554 -2.425 0.015
d_curio_1 ~~ sa07_13_t1 -0.060 -0.126 0.006 -0.156 -1.783 0.075
sa07_13_t1 ~~ sa07_13_t1 0.997 0.881 1.114 1.000 16.770 0.000

The correlation of specific, facet-level acceptance goals with the curiosity change score (current personality) is significantly different from zero, r = -0.156, p = 0.075.

6.5.2.52 Curiosity - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8251.837 8336.522 0.978 0.027 0.046
# parameters of interest
params_lcs_curio_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", # acceptance goals
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.052 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.707 NA NA
d_curio_1 ~1 0.013 -0.030 0.057 0.063 0.593 0.553
curio_t1 ~1 4.494 4.426 4.561 14.425 130.675 0.000
d_curio_1 ~~ d_curio_1 0.044 -0.005 0.093 1.000 1.743 0.081
curio_t1 ~~ d_curio_1 -0.027 -0.054 0.000 -0.408 -1.925 0.054
d_curio_1 ~~ sa07_13_t1 -0.035 -0.078 0.007 -0.168 -1.621 0.105
sa07_13_t1 ~~ sa07_13_t1 0.997 0.881 1.114 1.000 16.761 0.000

Correlation of specific, facet-level acceptance goals with curiosity change score (ideal personality) is not significantly different from zero, r = -0.168, p = 0.105.

6.5.2.53 Aesthetic - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8403.349 8488.034 0.978 0.047 0.051
# parameters of interest
params_lcs_aesth_curr_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.095 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.657 NA NA
d_aesth_1 ~1 0.002 -0.002 0.006 0.076 1.048 0.295
aesth_t1 ~1 3.060 2.944 3.176 67.584 51.752 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.997 0.000
aesth_t1 ~~ d_aesth_1 -0.001 -0.001 0.000 -0.439 -4.757 0.000
d_aesth_1 ~~ sa06_01_t1 0.002 -0.001 0.005 0.075 1.206 0.228
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.003 0.997

Correlation of general acceptance goal with aesthetic change score (current personality) is not significantly different from zero, r = 0.075, p = 0.228.

6.5.2.54 Aesthetic - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8312.801 8397.486 0.962 0.054 0.064
# parameters of interest
params_lcs_aesth_ideal_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.675 NA NA
d_aesth_1 ~1 0.001 -0.003 0.005 0.045 0.583 0.560
aesth_t1 ~1 2.792 2.663 2.920 80.987 42.533 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.277 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.282 -1.798 0.072
d_aesth_1 ~~ sa06_01_t1 -0.001 -0.004 0.003 -0.033 -0.441 0.659
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 0.003 0.998

Correlation of general acceptance goal with aesthetic change score (ideal personality) is not significantly different from zero, r = -0.033, p = 0.659.

6.5.2.55 Aesthetic - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8404.669 8489.354 0.971 0.055 0.066
# parameters of interest
params_lcs_aesth_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.090 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.648 NA NA
d_aesth_1 ~1 0.002 -0.002 0.006 0.075 1.034 0.301
aesth_t1 ~1 3.060 2.944 3.176 66.895 51.745 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.921 0.000
aesth_t1 ~~ d_aesth_1 -0.001 -0.001 0.000 -0.431 -4.607 0.000
d_aesth_1 ~~ sa07_14_t1 0.000 -0.003 0.004 0.013 0.188 0.851
sa07_14_t1 ~~ sa07_14_t1 0.997 0.901 1.093 1.000 20.436 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (current personality) is not significantly different from zero, r = 0.013, p = 0.851.

6.5.2.56 Aesthetic - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8312.937 8397.622 0.987 0.03 0.041
# parameters of interest
params_lcs_aesth_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", # acceptance goals
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.948 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.670 NA NA
d_aesth_1 ~1 0.001 -0.003 0.005 0.047 0.611 0.541
aesth_t1 ~1 2.792 2.663 2.920 80.114 42.529 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.309 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.273 -1.822 0.068
d_aesth_1 ~~ sa07_14_t1 0.000 -0.003 0.004 0.019 0.271 0.786
sa07_14_t1 ~~ sa07_14_t1 0.997 0.901 1.093 1.000 20.436 0.000

Correlation of specific, facet-level acceptance goals with aesthetic change score (ideal personality) is not significantly different from zero, r = 0.019, p = 0.786.

6.5.2.57 Imagination - current personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8151.211 8235.896 0.981 0.04 0.044
# parameters of interest
params_lcs_imagi_curr_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.081 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.566 NA NA
d_imagi_1 ~1 0.102 0.034 0.169 0.269 2.955 0.003
imagi_t1 ~1 3.622 3.523 3.721 5.017 71.805 0.000
d_imagi_1 ~~ d_imagi_1 0.143 0.054 0.231 1.000 3.165 0.002
imagi_t1 ~~ d_imagi_1 -0.109 -0.181 -0.037 -0.399 -2.948 0.003
d_imagi_1 ~~ sa06_01_t1 0.031 -0.029 0.090 0.082 1.013 0.311
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.194 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.002 0.998

Correlation of general acceptance goal with imagination change score (current personality) is not significantly different from zero, r = 0.082, p = 0.311.

6.5.2.58 Imagination - ideal personality: general acceptance goals

Results summary (sa06_01_t1 = general acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7653.275 7737.96 0.916 0.053 0.06
# parameters of interest
params_lcs_imagi_ideal_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa06_01_t1", "sa06_01_t1 ~~ sa06_01_t1", "sa06_01_t1 ~1 ", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.871 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.543 NA NA
d_imagi_1 ~1 -0.044 -0.092 0.004 -0.214 -1.790 0.074
imagi_t1 ~1 4.603 4.544 4.663 13.995 151.369 0.000
d_imagi_1 ~~ d_imagi_1 0.042 0.000 0.084 1.000 1.968 0.049
imagi_t1 ~~ d_imagi_1 -0.004 -0.034 0.026 -0.057 -0.250 0.803
d_imagi_1 ~~ sa06_01_t1 -0.016 -0.058 0.026 -0.076 -0.732 0.464
sa06_01_t1 ~~ sa06_01_t1 0.997 0.805 1.189 1.000 10.191 0.000
sa06_01_t1 ~1 0.000 -0.106 0.106 0.000 -0.002 0.999

Correlation of general acceptance goal with imagination change score (ideal personality) is not significantly different from zero, r = -0.076, p = 0.464.

6.5.2.59 Imagination - current personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 8151.258 8235.943 0.928 0.08 0.105
# parameters of interest
params_lcs_imagi_curr_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.094 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.582 NA NA
d_imagi_1 ~1 0.101 0.033 0.168 0.263 2.932 0.003
imagi_t1 ~1 3.622 3.523 3.721 5.020 71.837 0.000
d_imagi_1 ~~ d_imagi_1 0.147 0.058 0.236 1.000 3.232 0.001
imagi_t1 ~~ d_imagi_1 -0.116 -0.189 -0.044 -0.420 -3.152 0.002
d_imagi_1 ~~ sa07_15_t1 -0.032 -0.095 0.031 -0.084 -1.001 0.317
sa07_15_t1 ~~ sa07_15_t1 0.997 0.910 1.084 1.000 22.530 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (current personality) is not significantly different from zero, r = -0.084, p = 0.317.

6.5.2.60 Imagination - ideal personality: specific, facet-level acceptance goals

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp5) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 22 7653.705 7738.39 0.928 0.048 0.058
# parameters of interest
params_lcs_imagi_ideal_specif_hyp5 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp5, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", # acceptance goals
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp5, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.874 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.550 NA NA
d_imagi_1 ~1 -0.044 -0.092 0.004 -0.211 -1.783 0.075
imagi_t1 ~1 4.603 4.544 4.663 13.998 151.411 0.000
d_imagi_1 ~~ d_imagi_1 0.043 0.000 0.085 1.000 1.979 0.048
imagi_t1 ~~ d_imagi_1 -0.005 -0.035 0.025 -0.068 -0.302 0.763
d_imagi_1 ~~ sa07_15_t1 0.006 -0.036 0.047 0.027 0.262 0.793
sa07_15_t1 ~~ sa07_15_t1 0.997 0.910 1.084 1.000 22.520 0.000

Correlation of specific, facet-level acceptance goals with imagination change score (ideal personality) is not significantly different from zero, r = 0.027, p = 0.793.

6.5.3 Hyp 5: Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_hyp5 <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[1:20, ], digits = 3)
trait ref goal estimate std.all statistic p.value
extraversion current general 0.067 0.182 3.212 0.001
extraversion ideal general 0.026 0.066 1.114 0.265
extraversion current specific 0.012 0.049 0.496 0.620
extraversion ideal specific -0.022 -0.085 -0.905 0.365
agreeableness current general 0.030 0.137 1.520 0.129
agreeableness ideal general 0.025 0.079 1.219 0.223
agreeableness current specific 0.004 0.033 0.322 0.748
agreeableness ideal specific 0.006 0.033 0.383 0.701
conscientiousness current general 0.021 0.060 1.025 0.305
conscientiousness ideal general -0.007 -0.020 -0.344 0.731
conscientiousness current specific -0.072 -0.256 -2.610 0.009
conscientiousness ideal specific -0.021 -0.083 -1.310 0.190
neuroticism current general -0.069 -0.157 -2.306 0.021
neuroticism ideal general -0.014 -0.043 -0.728 0.467
neuroticism current specific 0.014 0.053 0.650 0.516
neuroticism ideal specific 0.025 0.140 2.319 0.020
openness current general 0.027 0.090 1.354 0.176
openness ideal general 0.002 0.007 0.088 0.930
openness current specific -0.010 -0.059 -0.747 0.455
openness ideal specific -0.002 -0.016 -0.193 0.847

Five covariances significantly differ from zero:

  • changes in current-level extraversion covary with the general acceptance goal
  • changes in current-level conscientiousness covary with the specific acceptance goals (latent factor of the three C facets) -> unexpected direction of the effect!
  • changes in current-level neuroticism covary with the general acceptance goals
  • changes in ideal-level neuroticism covary with the specific acceptance goals (latent factor of the three N facets)

Results summary across the Big Five facets: covariance of the latent change score and acceptance goal(s)

kable(df_table_hyp5[21:80, ], digits = 3)
trait ref goal estimate std.all statistic p.value
sociability current general 0.096 0.260 3.243 0.001
sociability ideal general -0.014 -0.054 -0.767 0.443
sociability current specific 0.001 0.004 0.039 0.969
sociability ideal specific -0.006 -0.025 -0.262 0.793
assertiveness current general 0.061 0.171 2.425 0.015
assertiveness ideal general 0.016 0.082 1.023 0.306
assertiveness current specific -0.008 -0.021 -0.253 0.800
assertiveness ideal specific -0.016 -0.077 -0.893 0.372
energy current general 0.020 0.063 0.985 0.325
energy ideal general 0.030 0.124 1.512 0.130
energy current specific -0.039 -0.116 -1.373 0.170
energy ideal specific -0.030 -0.126 -1.420 0.156
compassion current general 0.065 0.122 1.452 0.147
compassion ideal general 0.013 0.039 0.402 0.688
compassion current specific -0.020 -0.040 -0.574 0.566
compassion ideal specific -0.068 -0.203 -1.988 0.047
respectfulness current general 0.013 0.047 0.539 0.590
respectfulness ideal general 0.012 0.052 0.624 0.533
respectfulness current specific 0.010 0.037 0.388 0.698
respectfulness ideal specific -0.007 -0.030 -0.315 0.753
trust current general 0.020 0.063 0.717 0.473
trust ideal general 0.048 0.164 1.867 0.062
trust current specific -0.033 -0.102 -1.213 0.225
trust ideal specific -0.007 -0.025 -0.281 0.779
organization current general 0.004 0.009 0.133 0.894
organization ideal general -0.007 -0.037 -0.528 0.598
organization current specific -0.108 -0.211 -2.380 0.017
organization ideal specific -0.010 -0.050 -0.704 0.481
productiveness current general 0.024 0.067 0.868 0.386
productiveness ideal general 0.012 0.046 0.619 0.536
productiveness current specific -0.070 -0.182 -1.798 0.072
productiveness ideal specific -0.006 -0.021 -0.281 0.779
responsibility current general 0.038 0.145 1.459 0.145
responsibility ideal general 0.014 0.037 0.488 0.625
responsibility current specific -0.092 -0.322 -2.768 0.006
responsibility ideal specific -0.030 -0.080 -1.047 0.295
anxiety current general -0.065 -0.134 -1.468 0.142
anxiety ideal general -0.020 -0.080 -0.875 0.382
anxiety current specific -0.008 -0.016 -0.169 0.866
anxiety ideal specific -0.010 -0.037 -0.305 0.760
depression current general -0.030 -0.073 -1.152 0.249
depression ideal general 0.006 0.028 0.408 0.684
depression current specific 0.033 0.078 0.884 0.377
depression ideal specific 0.000 0.001 0.010 0.992
volatility current general -0.077 -0.138 -1.923 0.054
volatility ideal general -0.060 -0.187 -2.338 0.019
volatility current specific -0.004 -0.007 -0.085 0.932
volatility ideal specific -0.023 -0.072 -0.815 0.415
curiosity current general 0.036 0.097 1.197 0.231
curiosity ideal general 0.017 0.084 0.961 0.336
curiosity current specific -0.060 -0.156 -1.783 0.075
curiosity ideal specific -0.035 -0.168 -1.621 0.105
aesthetic current general 0.002 0.075 1.206 0.228
aesthetic ideal general -0.001 -0.033 -0.441 0.659
aesthetic current specific 0.000 0.013 0.188 0.851
aesthetic ideal specific 0.000 0.019 0.271 0.786
imagination current general 0.031 0.082 1.013 0.311
imagination ideal general -0.016 -0.076 -0.732 0.464
imagination current specific -0.032 -0.084 -1.001 0.317
imagination ideal specific 0.006 0.027 0.262 0.793

Looking at the facets, we find four covariances that significantly differ from zero (relatively unsystematic across facets / current-ideal / goal dimension):
- Changes in current-level sociability covary with the general acceptance goal.
- Further, changes in current-level organization and responsibility covary with the respective specific facet acceptance goal.
- Changes in ideal-level volatility covary with the general acceptance goal

Prepare data frame for plotting:

Show the code
df_table_hyp5_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_ideal_hyp5 %>% filter(term=="d_extra_1 ~~ sa06_01_t1"),
  params_lcs_extra_curr_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_extra_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_extra_1"),
  params_lcs_agree_curr_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_ideal_hyp5 %>% filter(term=="d_agree_1 ~~ sa06_01_t1"),
  params_lcs_agree_curr_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_agree_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_agree_1"),
  params_lcs_consc_curr_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_ideal_hyp5 %>% filter(term=="d_consc_1 ~~ sa06_01_t1"),
  params_lcs_consc_curr_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_consc_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_consc_1"),
  params_lcs_neuro_curr_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_ideal_hyp5 %>% filter(term=="d_neuro_1 ~~ sa06_01_t1"),
  params_lcs_neuro_curr_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_neuro_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_neuro_1"),
  params_lcs_openn_curr_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_ideal_hyp5 %>% filter(term=="d_openn_1 ~~ sa06_01_t1"),
  params_lcs_openn_curr_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  params_lcs_openn_ideal_specif_hyp5 %>% filter(term=="goals ~~ d_openn_1"),
  #facets
  params_lcs_socia_curr_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_ideal_hyp5 %>% filter(term=="d_socia_1 ~~ sa06_01_t1"),
  params_lcs_socia_curr_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_socia_ideal_specif_hyp5 %>% filter(term=="d_socia_1 ~~ sa07_01_t1"),
  params_lcs_asser_curr_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_ideal_hyp5 %>% filter(term=="d_asser_1 ~~ sa06_01_t1"),
  params_lcs_asser_curr_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_asser_ideal_specif_hyp5 %>% filter(term=="d_asser_1 ~~ sa07_02_t1"),
  params_lcs_energ_curr_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_ideal_hyp5 %>% filter(term=="d_energ_1 ~~ sa06_01_t1"),
  params_lcs_energ_curr_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_energ_ideal_specif_hyp5 %>% filter(term=="d_energ_1 ~~ sa07_03_t1"),
  params_lcs_compa_curr_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_ideal_hyp5 %>% filter(term=="d_compa_1 ~~ sa06_01_t1"),
  params_lcs_compa_curr_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_compa_ideal_specif_hyp5 %>% filter(term=="d_compa_1 ~~ sa07_04_t1"),
  params_lcs_respe_curr_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_ideal_hyp5 %>% filter(term=="d_respe_1 ~~ sa06_01_t1"),
  params_lcs_respe_curr_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_respe_ideal_specif_hyp5 %>% filter(term=="d_respe_1 ~~ sa07_05_t1"),
  params_lcs_trust_curr_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_ideal_hyp5 %>% filter(term=="d_trust_1 ~~ sa06_01_t1"),
  params_lcs_trust_curr_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_trust_ideal_specif_hyp5 %>% filter(term=="d_trust_1 ~~ sa07_06_t1"),
  params_lcs_organ_curr_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_ideal_hyp5 %>% filter(term=="d_organ_1 ~~ sa06_01_t1"),
  params_lcs_organ_curr_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_organ_ideal_specif_hyp5 %>% filter(term=="d_organ_1 ~~ sa07_07_t1"),
  params_lcs_produ_curr_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_ideal_hyp5 %>% filter(term=="d_produ_1 ~~ sa06_01_t1"),
  params_lcs_produ_curr_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_produ_ideal_specif_hyp5 %>% filter(term=="d_produ_1 ~~ sa07_08_t1"),
  params_lcs_respo_curr_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_ideal_hyp5 %>% filter(term=="d_respo_1 ~~ sa06_01_t1"),
  params_lcs_respo_curr_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_respo_ideal_specif_hyp5 %>% filter(term=="d_respo_1 ~~ sa07_09_t1"),
  params_lcs_anxie_curr_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_ideal_hyp5 %>% filter(term=="d_anxie_1 ~~ sa06_01_t1"),
  params_lcs_anxie_curr_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_anxie_ideal_specif_hyp5 %>% filter(term=="d_anxie_1 ~~ sa07_10_t1"),
  params_lcs_depre_curr_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_ideal_hyp5 %>% filter(term=="d_depre_1 ~~ sa06_01_t1"),
  params_lcs_depre_curr_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_depre_ideal_specif_hyp5 %>% filter(term=="d_depre_1 ~~ sa07_11_t1"),
  params_lcs_volat_curr_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_ideal_hyp5 %>% filter(term=="d_volat_1 ~~ sa06_01_t1"),
  params_lcs_volat_curr_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_volat_ideal_specif_hyp5 %>% filter(term=="d_volat_1 ~~ sa07_12_t1"),
  params_lcs_curio_curr_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_ideal_hyp5 %>% filter(term=="d_curio_1 ~~ sa06_01_t1"),
  params_lcs_curio_curr_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_curio_ideal_specif_hyp5 %>% filter(term=="d_curio_1 ~~ sa07_13_t1"),
  params_lcs_aesth_curr_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_ideal_hyp5 %>% filter(term=="d_aesth_1 ~~ sa06_01_t1"),
  params_lcs_aesth_curr_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_aesth_ideal_specif_hyp5 %>% filter(term=="d_aesth_1 ~~ sa07_14_t1"),
  params_lcs_imagi_curr_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_ideal_hyp5 %>% filter(term=="d_imagi_1 ~~ sa06_01_t1"),
  params_lcs_imagi_curr_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  params_lcs_imagi_ideal_specif_hyp5 %>% filter(term=="d_imagi_1 ~~ sa07_15_t1"),
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=4),
         ref = rep(rep(c("current", "ideal"), 2), 20),
         goal = rep(c(rep("general", 2), rep("specific", 2)), 20)) %>% 
  select(trait, ref, goal, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp5_plot <- df_table_hyp5_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor(ref, levels = c("current", "ideal"), labels = c("current", "ideal"))) %>% 
  mutate(goal = factor(goal, levels = c("general", "specific"), labels = c("general", "specific"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • current = current-level personality
  • ideal = ideal-level personality
  • general = general acceptance goal
  • specific = specific, facet-level acceptance goal(s)
Show the code
ggplot(df_table_hyp5_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + goal, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6 H6: Desire to change and frequency of self-improvement behaviors as moderators of change in personality in self-improvement group (H2 in paper)

Desire to change and frequency of self-improvement behaviors measured at the follow-up assessment will be positively related to change in current personality ratings in the self-improvement group.

To test this hypothesis, we will estimate the mean-level difference in current trait ratings between baseline and follow up using a latent change model for each big five domain and facet. We will then include two moderators. The first will indicate how much the individual wanted to change on a given big five domain or facet. The second will indicate their frequency of self-improvement behaviors. We will estimate the main effects of each of these variables and the interaction between these variables on the trait change score.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb_mod <- df_sbsa %>% 
  filter(rando=="Self-Improvement") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb07", # facet-specific change goals
                                  "sb04"))) %>% # frequency self-improvement behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb07", "sb04")))) %>% 
  select(-c(sb07_01_t2, sb07_02_t2, sb07_03_t2, sb07_04_t2, sb07_05_t2, 
            sb07_06_t2, sb07_07_t2, sb07_08_t2, sb07_09_t2, sb07_10_t2, 
            sb07_11_t2, sb07_12_t2, sb07_13_t2, sb07_14_t2, sb07_15_t2, 
            sb04_01_t1, sb04_02_t1, sb04_03_t1)) # frequency of self-improvement behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa_wide_pers_sb_mod <- df_sbsa_wide_pers_sb_mod %>% 
  mutate_at(c(colnames(df_sbsa_wide_pers_sb_mod)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa_wide_pers_sb_mod)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb_mod <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Improvement") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb_mod)

6.6.1 Big Five traits (run models)

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_mod_goal <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in current personality ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  mod_names = paste0("sb07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"), 
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], 
                                         "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), trait_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

trait_template_mod_frequ <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 5 traits -> change in current personality ratings
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), trait_model_fit))
}  

# loop across 5 traits -> change in *ideal*-self ratings (not hypothesis-conform)
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"),  # ideal instead of current!
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal instead of curr
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), trait_model_fit))
}  

6.6.2 Big Five traits (current personality)

6.6.2.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6674.075 6775.685 0.98 0.051 0.042
# parameters of interest
params_lcs_extra_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.004 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.612 NA NA
d_extra_1 ~1 0.134 0.086 0.182 0.380 5.437 0.000
extra_t1 ~1 2.755 2.684 2.827 4.769 75.569 0.000
d_extra_1 ~~ d_extra_1 0.115 0.071 0.159 0.930 5.137 0.000
extra_t1 ~~ d_extra_1 -0.032 -0.062 -0.003 -0.202 -2.173 0.030
extra_t1 ~ goals -0.555 -0.745 -0.364 -0.571 -5.691 0.000
d_extra_1 ~ goals 0.156 0.023 0.289 0.264 2.296 0.022
goals ~~ goals 0.355 0.172 0.537 1.000 3.803 0.000

Specific, facet-level change goals significantly moderate changes in extraversion (current personality), b = 0.156, p = 0.022.

6.6.2.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6355.598 6457.208 0.985 0.046 0.051
# parameters of interest
params_lcs_extra_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.003 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.609 NA NA
d_extra_1 ~1 0.132 0.085 0.180 0.381 5.426 0.000
extra_t1 ~1 2.756 2.685 2.827 4.811 75.587 0.000
d_extra_1 ~~ d_extra_1 0.120 0.073 0.168 0.994 4.961 0.000
extra_t1 ~~ d_extra_1 -0.065 -0.099 -0.031 -0.334 -3.751 0.000
extra_t1 ~ frequ 0.169 0.038 0.299 0.213 2.538 0.011
d_extra_1 ~ frequ 0.038 -0.044 0.121 0.080 0.913 0.361
frequ ~~ frequ 0.523 0.362 0.684 1.000 6.351 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (current personality) is not significantly different from zero, b = 0.038, p = 0.361.

6.6.2.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6050.259 6151.869 0.981 0.045 0.044
# parameters of interest
params_lcs_agree_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.064 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.075 0.038 0.112 0.355 3.983 0.000
agree_t1 ~1 3.357 3.296 3.418 8.041 107.891 0.000
d_agree_1 ~~ d_agree_1 0.043 0.021 0.065 0.961 3.870 0.000
agree_t1 ~~ d_agree_1 -0.027 -0.043 -0.011 -0.329 -3.352 0.001
agree_t1 ~ goals -0.219 -0.338 -0.100 -0.319 -3.617 0.000
d_agree_1 ~ goals 0.069 -0.002 0.140 0.198 1.902 0.057
goals ~~ goals 0.368 0.203 0.534 1.000 4.361 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (current personality) is not significantly different from zero, b = 0.069, p = 0.057.

6.6.2.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5814.298 5915.908 0.991 0.031 0.04
# parameters of interest
params_lcs_agree_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.060 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.078 0.039 0.116 0.358 3.979 0.000
agree_t1 ~1 3.356 3.295 3.417 7.890 107.487 0.000
d_agree_1 ~~ d_agree_1 0.046 0.023 0.069 0.973 3.923 0.000
agree_t1 ~~ d_agree_1 -0.036 -0.055 -0.018 -0.408 -3.857 0.000
agree_t1 ~ frequ 0.111 0.029 0.194 0.194 2.643 0.008
d_agree_1 ~ frequ 0.048 -0.010 0.106 0.164 1.607 0.108
frequ ~~ frequ 0.551 0.389 0.714 1.000 6.639 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (current personality) is not significantly different from zero, b = 0.048, p = 0.108.

6.6.2.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6056.467 6158.077 0.981 0.063 0.035
# parameters of interest
params_lcs_consc_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.506 NA NA
d_consc_1 ~1 0.123 0.074 0.172 0.342 4.963 0.000
consc_t1 ~1 3.552 3.469 3.636 4.826 83.372 0.000
d_consc_1 ~~ d_consc_1 0.124 0.081 0.167 0.962 5.686 0.000
consc_t1 ~~ d_consc_1 -0.053 -0.089 -0.016 -0.254 -2.848 0.004
consc_t1 ~ goals -0.539 -0.639 -0.440 -0.600 -10.613 0.000
d_consc_1 ~ goals 0.085 0.021 0.150 0.195 2.593 0.010
goals ~~ goals 0.671 0.532 0.810 1.000 9.441 0.000

Specific, facet-level change goals significantly moderate changes in conscientiousness (current personality), b = 0.085, p = 0.01.

6.6.2.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6052.94 6154.55 0.994 0.034 0.032
# parameters of interest
params_lcs_consc_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.507 NA NA
d_consc_1 ~1 0.124 0.075 0.173 0.342 4.951 0.000
consc_t1 ~1 3.551 3.468 3.635 4.795 83.278 0.000
d_consc_1 ~~ d_consc_1 0.129 0.085 0.172 0.983 5.781 0.000
consc_t1 ~~ d_consc_1 -0.089 -0.131 -0.048 -0.340 -4.202 0.000
consc_t1 ~ frequ 0.134 -0.004 0.273 0.133 1.907 0.056
d_consc_1 ~ frequ 0.064 -0.008 0.136 0.130 1.754 0.079
frequ ~~ frequ 0.539 0.377 0.701 1.000 6.516 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (current personality) is not significantly different from zero, b = 0.064, p = 0.079.

6.6.2.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6538.428 6640.038 0.987 0.053 0.03
# parameters of interest
params_lcs_neuro_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.027 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.629 NA NA
d_neuro_1 ~1 -0.211 -0.273 -0.149 -0.425 -6.688 0.000
neuro_t1 ~1 3.492 3.400 3.584 4.295 74.420 0.000
d_neuro_1 ~~ d_neuro_1 0.245 0.171 0.320 0.988 6.445 0.000
neuro_t1 ~~ d_neuro_1 -0.113 -0.166 -0.060 -0.367 -4.201 0.000
neuro_t1 ~ goals 0.682 0.549 0.816 0.643 10.023 0.000
d_neuro_1 ~ goals -0.070 -0.167 0.026 -0.108 -1.429 0.153
goals ~~ goals 0.586 0.448 0.724 1.000 8.309 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (current personality) is not significantly different from zero, b = -0.07, p = 0.153.

6.6.2.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6533.498 6635.108 0.988 0.049 0.042
# parameters of interest
params_lcs_neuro_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.030 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.630 NA NA
d_neuro_1 ~1 -0.211 -0.272 -0.149 -0.429 -6.725 0.000
neuro_t1 ~1 3.491 3.399 3.582 4.346 74.573 0.000
d_neuro_1 ~~ d_neuro_1 0.238 0.166 0.311 0.987 6.470 0.000
neuro_t1 ~~ d_neuro_1 -0.137 -0.192 -0.081 -0.349 -4.834 0.000
neuro_t1 ~ frequ 0.061 -0.093 0.215 0.056 0.778 0.437
d_neuro_1 ~ frequ -0.077 -0.184 0.030 -0.115 -1.417 0.157
frequ ~~ frequ 0.538 0.374 0.702 1.000 6.433 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (current personality) is not significantly different from zero, b = -0.077, p = 0.157.

6.6.2.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6191.194 6292.804 0.972 0.064 0.053
# parameters of interest
params_lcs_openn_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.912 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.411 NA NA
d_openn_1 ~1 0.058 0.022 0.093 0.294 3.175 0.001
openn_t1 ~1 3.435 3.367 3.503 7.897 98.482 0.000
d_openn_1 ~~ d_openn_1 0.035 0.015 0.055 0.916 3.398 0.001
openn_t1 ~~ d_openn_1 0.007 -0.008 0.022 0.087 0.882 0.378
openn_t1 ~ goals -0.253 -0.394 -0.112 -0.279 -3.517 0.000
d_openn_1 ~ goals 0.119 0.033 0.204 0.290 2.712 0.007
goals ~~ goals 0.229 0.124 0.335 1.000 4.251 0.000

Trait-specific (facet) change goals significantly moderate changes in openness (current personality), b = 0.119, p = 0.007.

6.6.2.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6125.21 6226.82 0.992 0.034 0.032
# parameters of interest
params_lcs_openn_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.912 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.410 NA NA
d_openn_1 ~1 0.056 0.021 0.092 0.291 3.131 0.002
openn_t1 ~1 3.435 3.367 3.504 7.948 98.534 0.000
d_openn_1 ~~ d_openn_1 0.035 0.015 0.055 0.936 3.466 0.001
openn_t1 ~~ d_openn_1 -0.005 -0.020 0.010 -0.068 -0.689 0.491
openn_t1 ~ frequ 0.147 0.062 0.232 0.247 3.404 0.001
d_openn_1 ~ frequ 0.068 0.006 0.130 0.254 2.148 0.032
frequ ~~ frequ 0.527 0.368 0.687 1.000 6.497 0.000

The frequency of self-improvement behaviors significantly moderates changes in openness (current personality), b = 0.068, p = 0.032.

6.6.3 Big Five traits (ideal personality)

6.6.3.1 Extraversion: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6382.805 6484.415 0.978 0.041 0.043
# parameters of interest
params_lcs_extra_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # change goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.933 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.580 NA NA
d_extra_1 ~1 -0.029 -0.080 0.022 -0.099 -1.131 0.258
extra_t1 ~1 3.717 3.653 3.781 7.773 113.970 0.000
d_extra_1 ~~ d_extra_1 0.088 0.041 0.136 1.000 3.651 0.000
extra_t1 ~~ d_extra_1 -0.027 -0.064 0.010 -0.210 -1.433 0.152
extra_t1 ~ goals 0.387 0.127 0.646 0.436 2.923 0.003
d_extra_1 ~ goals -0.002 -0.150 0.146 -0.004 -0.027 0.978
goals ~~ goals 0.291 0.085 0.497 1.000 2.774 0.006

The moderation effect of specific, facet-level change goals with the extraversion change score (ideal personality) is not significantly different from zero, b = -0.002, p = 0.978.

6.6.3.2 Extraversion: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6039.181 6140.791 0.975 0.049 0.049
# parameters of interest
params_lcs_extra_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 0.934 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.582 NA NA
d_extra_1 ~1 -0.028 -0.079 0.023 -0.095 -1.088 0.277
extra_t1 ~1 3.717 3.653 3.781 7.778 113.923 0.000
d_extra_1 ~~ d_extra_1 0.088 0.041 0.135 0.993 3.702 0.000
extra_t1 ~~ d_extra_1 -0.030 -0.067 0.006 -0.217 -1.618 0.106
extra_t1 ~ frequ 0.131 0.032 0.230 0.204 2.603 0.009
d_extra_1 ~ frequ 0.034 -0.048 0.117 0.086 0.820 0.412
frequ ~~ frequ 0.554 0.391 0.717 1.000 6.658 0.000

The moderation effect of the frequency of self-improvement behaviors with the extraversion change score (ideal personality) is not significantly different from zero, b = 0.034, p = 0.412.

6.6.3.3 Agreeableness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6169.885 6271.495 0.995 0.024 0.034
# parameters of interest
params_lcs_agree_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # change goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.040 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.693 NA NA
d_agree_1 ~1 0.032 -0.006 0.070 0.115 1.640 0.101
agree_t1 ~1 3.710 3.642 3.777 8.871 108.171 0.000
d_agree_1 ~~ d_agree_1 0.077 0.039 0.114 0.992 4.007 0.000
agree_t1 ~~ d_agree_1 -0.046 -0.073 -0.019 -0.396 -3.374 0.001
agree_t1 ~ goals -0.029 -0.122 0.064 -0.044 -0.604 0.546
d_agree_1 ~ goals -0.039 -0.113 0.035 -0.091 -1.031 0.302
goals ~~ goals 0.421 0.259 0.583 1.000 5.104 0.000

The moderation effect of specific, facet-level change goals with the agreeableness change score (ideal personality) is not significantly different from zero, b = -0.039, p = 0.302.

6.6.3.4 Agreeableness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5926.143 6027.753 0.995 0.024 0.037
# parameters of interest
params_lcs_agree_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.041 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.693 NA NA
d_agree_1 ~1 0.032 -0.007 0.070 0.114 1.620 0.105
agree_t1 ~1 3.710 3.643 3.777 8.912 108.227 0.000
d_agree_1 ~~ d_agree_1 0.077 0.040 0.114 1.000 4.069 0.000
agree_t1 ~~ d_agree_1 -0.045 -0.072 -0.018 -0.394 -3.252 0.001
agree_t1 ~ frequ 0.096 0.016 0.176 0.172 2.358 0.018
d_agree_1 ~ frequ -0.005 -0.066 0.056 -0.013 -0.161 0.872
frequ ~~ frequ 0.555 0.392 0.718 1.000 6.687 0.000

The moderation effect of the frequency of self-improvement behaviors with the agreeableness change score (ideal personality) is not significantly different from zero, b = -0.005, p = 0.872.

6.6.3.5 Conscientiousness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5501.914 5603.524 1 0 0.024
# parameters of interest
params_lcs_consc_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # change goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.085 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.781 NA NA
d_consc_1 ~1 0.024 -0.023 0.071 0.071 0.996 0.319
consc_t1 ~1 4.370 4.314 4.426 9.387 153.720 0.000
d_consc_1 ~~ d_consc_1 0.112 0.059 0.166 1.000 4.130 0.000
consc_t1 ~~ d_consc_1 -0.073 -0.114 -0.031 -0.465 -3.402 0.001
consc_t1 ~ goals -0.008 -0.092 0.076 -0.013 -0.191 0.848
d_consc_1 ~ goals -0.007 -0.078 0.064 -0.016 -0.187 0.852
goals ~~ goals 0.589 0.450 0.728 1.000 8.326 0.000

The moderation effect of specific, facet-level change goals with the conscientiousness change score (ideal personality) is not significantly different from zero, b = -0.007, p = 0.852.

6.6.3.6 Conscientiousness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5400.562 5502.172 0.997 0.016 0.031
# parameters of interest
params_lcs_consc_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.084 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.781 NA NA
d_consc_1 ~1 0.024 -0.023 0.070 0.071 0.995 0.320
consc_t1 ~1 4.370 4.315 4.426 9.438 153.870 0.000
d_consc_1 ~~ d_consc_1 0.111 0.058 0.164 1.000 4.119 0.000
consc_t1 ~~ d_consc_1 -0.071 -0.112 -0.031 -0.468 -3.437 0.001
consc_t1 ~ frequ 0.091 0.006 0.177 0.146 2.098 0.036
d_consc_1 ~ frequ -0.002 -0.073 0.069 -0.004 -0.053 0.958
frequ ~~ frequ 0.549 0.387 0.712 1.000 6.626 0.000

The moderation effect of the frequency of self-improvement behaviors with the conscientiousness change score (ideal personality) is not significantly different from zero, b = -0.002, p = 0.958.

6.6.3.7 Neuroticism: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5698.282 5799.892 0.986 0.041 0.03
# parameters of interest
params_lcs_neuro_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # change goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.048 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.773 NA NA
d_neuro_1 ~1 -0.042 -0.086 0.002 -0.127 -1.863 0.062
neuro_t1 ~1 1.657 1.601 1.713 3.731 58.148 0.000
d_neuro_1 ~~ d_neuro_1 0.107 0.068 0.147 1.000 5.313 0.000
neuro_t1 ~~ d_neuro_1 -0.062 -0.095 -0.030 -0.429 -3.797 0.000
neuro_t1 ~ goals 0.022 -0.055 0.098 0.036 0.553 0.581
d_neuro_1 ~ goals -0.006 -0.074 0.062 -0.014 -0.175 0.861
goals ~~ goals 0.537 0.393 0.680 1.000 7.335 0.000

The moderation effect of specific, facet-level change goals with the neuroticism change score (ideal personality) is not significantly different from zero, b = -0.006, p = 0.861.

6.6.3.8 Neuroticism: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 5554.486 5656.096 0.992 0.031 0.036
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.048 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.773 NA NA
d_neuro_1 ~1 -0.042 -0.086 0.002 -0.128 -1.869 0.062
neuro_t1 ~1 1.657 1.601 1.713 3.726 58.125 0.000
d_neuro_1 ~~ d_neuro_1 0.105 0.064 0.146 0.977 5.014 0.000
neuro_t1 ~~ d_neuro_1 -0.064 -0.096 -0.031 -0.444 -3.853 0.000
neuro_t1 ~ frequ -0.033 -0.120 0.054 -0.055 -0.745 0.456
d_neuro_1 ~ frequ -0.067 -0.138 0.004 -0.153 -1.853 0.064
frequ ~~ frequ 0.559 0.395 0.722 1.000 6.692 0.000

The moderation effect of the frequency of self-improvement behaviors with the neuroticism change score (ideal personality) is not significantly different from zero, b = -0.067, p = 0.064.

6.6.3.9 Openness: specific, facet-level change goals as moderator of change

Results summary (goals = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6202.72 6304.331 0.99 0.032 0.047
# parameters of interest
params_lcs_openn_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # change goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.015 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.647 NA NA
d_openn_1 ~1 0.004 -0.036 0.044 0.015 0.179 0.858
openn_t1 ~1 3.739 3.676 3.801 9.453 117.359 0.000
d_openn_1 ~~ d_openn_1 0.063 0.027 0.098 0.988 3.465 0.001
openn_t1 ~~ d_openn_1 -0.034 -0.060 -0.008 -0.348 -2.601 0.009
openn_t1 ~ goals 0.031 -0.085 0.147 0.037 0.520 0.603
d_openn_1 ~ goals 0.057 -0.044 0.159 0.110 1.112 0.266
goals ~~ goals 0.232 0.132 0.332 1.000 4.550 0.000

The moderation effect of specific, facet-level change goals with the openness change score (ideal personality) is not significantly different from zero, b = 0.057, p = 0.266.

6.6.3.10 Openness: frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 26 6124.339 6225.949 0.994 0.024 0.037
# parameters of interest
params_lcs_openn_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.016 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.647 NA NA
d_openn_1 ~1 0.003 -0.037 0.043 0.013 0.156 0.876
openn_t1 ~1 3.739 3.676 3.801 9.508 117.344 0.000
d_openn_1 ~~ d_openn_1 0.062 0.026 0.099 0.990 3.335 0.001
openn_t1 ~~ d_openn_1 -0.036 -0.061 -0.011 -0.375 -2.774 0.006
openn_t1 ~ frequ 0.118 0.030 0.207 0.218 2.613 0.009
d_openn_1 ~ frequ 0.035 -0.030 0.099 0.100 1.044 0.296
frequ ~~ frequ 0.524 0.365 0.683 1.000 6.453 0.000

The moderation effect of the frequency of self-improvement behaviors with the openness change score (ideal personality) is not significantly different from zero, b = 0.035, p = 0.296.

6.6.4 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goal

facet_template_mod_goal <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> change in current personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  mod_name = paste0("sb07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp6")), facet_model_fit))
}  

# 2nd, for frequency of self-improvement behavior

facet_template_mod_frequ <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

# loop across 15 facets -> change in current personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp6")), facet_model_fit))
}  

# loop across 15 facets -> change in ideal personality ratings
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs) # ideal
  template_filled <- str_replace_all(facet_template_mod_frequ, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), template_filled)) # ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp6")), facet_model_fit))
}  

6.6.5 Big Five facets (current personality)

6.6.5.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8629.306 8719.192 0.953 0.074 0.044
# parameters of interest
params_lcs_socia_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.028 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.646 NA NA
d_socia_1 ~1 0.184 0.098 0.270 0.345 4.191 0.000
socia_t1 ~1 2.800 2.685 2.916 3.300 47.445 0.000
d_socia_1 ~~ d_socia_1 0.277 0.166 0.388 0.975 4.903 0.000
socia_t1 ~~ d_socia_1 -0.129 -0.201 -0.057 -0.325 -3.534 0.000
d_socia_1 ~ sb07_01_t1 0.084 0.007 0.162 0.158 2.137 0.033
sb07_01_t1 ~~ sb07_01_t1 0.998 0.867 1.128 1.000 14.953 0.000

Facet-specific change goals significantly moderate changes in sociability (current personality), b = 0.084, p = 0.033.

6.6.5.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10295.72 10412.96 0.959 0.06 0.049
# parameters of interest
params_lcs_socia_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.030 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.645 NA NA
d_socia_1 ~1 0.179 0.093 0.265 0.340 4.084 0.000
socia_t1 ~1 2.806 2.682 2.929 3.349 44.424 0.000
d_socia_1 ~~ d_socia_1 0.276 0.163 0.389 1.000 4.775 0.000
socia_t1 ~~ d_socia_1 -0.156 -0.237 -0.075 -0.362 -3.784 0.000
socia_t1 ~ frequ 0.223 0.037 0.409 0.195 2.354 0.019
d_socia_1 ~ frequ -0.011 -0.134 0.111 -0.016 -0.180 0.858
frequ ~~ frequ 0.539 0.378 0.699 1.000 6.576 0.000

The moderation effect of the frequency of self-improvement behaviors with sociability change score (current personality) is not significantly different from zero, b = -0.011, p = 0.858.

6.6.5.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8993.331 9083.217 0.976 0.043 0.045
# parameters of interest
params_lcs_asser_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.994 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.424 NA NA
d_asser_1 ~1 0.059 0.004 0.115 0.235 2.093 0.036
asser_t1 ~1 3.057 2.958 3.156 5.180 60.546 0.000
d_asser_1 ~~ d_asser_1 0.061 0.008 0.115 0.969 2.240 0.025
asser_t1 ~~ d_asser_1 -0.023 -0.062 0.016 -0.163 -1.156 0.248
d_asser_1 ~ sb07_02_t1 0.045 -0.012 0.101 0.177 1.539 0.124
sb07_02_t1 ~~ sb07_02_t1 0.998 0.873 1.123 1.000 15.654 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (current personality) is not significantly different from zero, b = 0.045, p = 0.124.

6.6.5.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10605.62 10722.86 0.974 0.042 0.047
# parameters of interest
params_lcs_asser_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.992 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.425 NA NA
d_asser_1 ~1 0.056 0.003 0.109 0.228 2.067 0.039
asser_t1 ~1 3.059 2.958 3.161 5.355 59.063 0.000
d_asser_1 ~~ d_asser_1 0.058 0.008 0.108 0.973 2.294 0.022
asser_t1 ~~ d_asser_1 -0.031 -0.069 0.006 -0.232 -1.626 0.104
asser_t1 ~ frequ 0.142 0.016 0.268 0.182 2.216 0.027
d_asser_1 ~ frequ 0.055 -0.032 0.141 0.163 1.237 0.216
frequ ~~ frequ 0.534 0.374 0.694 1.000 6.527 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (current personality) is not significantly different from zero, b = 0.055, p = 0.216.

6.6.5.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8947.42 9037.305 0.952 0.063 0.045
# parameters of interest
params_lcs_energ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.998 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.557 NA NA
d_energ_1 ~1 0.085 0.041 0.130 0.412 3.753 0.000
energ_t1 ~1 3.293 3.194 3.392 8.882 65.243 0.000
d_energ_1 ~~ d_energ_1 0.042 0.007 0.077 0.986 2.351 0.019
energ_t1 ~~ d_energ_1 -0.017 -0.036 0.001 -0.251 -1.813 0.070
d_energ_1 ~ sb07_03_t1 0.024 -0.008 0.056 0.118 1.497 0.134
sb07_03_t1 ~~ sb07_03_t1 0.997 0.860 1.134 1.000 14.284 0.000

The moderation effect of the facet-specific change goal with the energy change score (current personality) is not significantly different from zero, b = 0.024, p = 0.134.

6.6.5.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10586.28 10703.52 0.958 0.053 0.053
# parameters of interest
params_lcs_energ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.993 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.551 NA NA
d_energ_1 ~1 0.091 0.046 0.136 0.418 3.960 0.000
energ_t1 ~1 3.291 3.192 3.391 8.399 64.893 0.000
d_energ_1 ~~ d_energ_1 0.047 0.010 0.084 0.993 2.507 0.012
energ_t1 ~~ d_energ_1 -0.024 -0.047 -0.001 -0.297 -2.088 0.037
energ_t1 ~ frequ 0.139 0.035 0.244 0.256 2.611 0.009
d_energ_1 ~ frequ 0.025 -0.042 0.091 0.082 0.729 0.466
frequ ~~ frequ 0.518 0.354 0.682 1.000 6.190 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (current personality) is not significantly different from zero, b = 0.025, p = 0.466.

6.6.5.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8694.702 8784.588 0.996 0.014 0.034
# parameters of interest
params_lcs_compa_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.139 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.403 NA NA
d_compa_1 ~1 0.103 0.038 0.169 0.413 3.077 0.002
compa_t1 ~1 4.149 4.060 4.238 5.855 91.329 0.000
d_compa_1 ~~ d_compa_1 0.060 -0.015 0.136 0.957 1.558 0.119
compa_t1 ~~ d_compa_1 -0.080 -0.153 -0.008 -0.475 -2.176 0.030
d_compa_1 ~ sb07_04_t1 0.052 -0.014 0.118 0.207 1.541 0.123
sb07_04_t1 ~~ sb07_04_t1 0.998 0.905 1.091 1.000 21.039 0.000

The moderation effect of the facet-specific change goal with the compassion change score (current personality) is not significantly different from zero, b = 0.052, p = 0.123.

6.6.5.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10296.89 10414.13 0.988 0.026 0.043
# parameters of interest
params_lcs_compa_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.138 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.401 NA NA
d_compa_1 ~1 0.103 0.037 0.170 0.416 3.063 0.002
compa_t1 ~1 4.149 4.059 4.239 5.872 89.984 0.000
d_compa_1 ~~ d_compa_1 0.058 -0.017 0.133 0.939 1.524 0.127
compa_t1 ~~ d_compa_1 -0.097 -0.171 -0.023 -0.582 -2.576 0.010
compa_t1 ~ frequ 0.199 0.063 0.336 0.210 2.859 0.004
d_compa_1 ~ frequ 0.083 -0.016 0.181 0.247 1.635 0.102
frequ ~~ frequ 0.556 0.394 0.718 1.000 6.723 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (current personality) is not significantly different from zero, b = 0.083, p = 0.102.

6.6.5.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7915.364 8005.25 0.944 0.068 0.056
# parameters of interest
params_lcs_respe_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.128 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.632 NA NA
d_respe_1 ~1 0.067 0.012 0.121 0.200 2.394 0.017
respe_t1 ~1 4.397 4.325 4.470 7.398 118.959 0.000
d_respe_1 ~~ d_respe_1 0.100 0.050 0.150 0.906 3.918 0.000
respe_t1 ~~ d_respe_1 -0.068 -0.118 -0.017 -0.396 -2.617 0.009
d_respe_1 ~ sb07_05_t1 0.102 0.039 0.165 0.307 3.178 0.001
sb07_05_t1 ~~ sb07_05_t1 0.998 0.886 1.111 1.000 17.355 0.000

The facet-specific change goal significantly moderates changes in respectfulness (current personality), b = 0.102, p = 0.001.

6.6.5.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9568.562 9685.805 0.952 0.057 0.053
# parameters of interest
params_lcs_respe_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.127 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.631 NA NA
d_respe_1 ~1 0.065 0.011 0.120 0.199 2.338 0.019
respe_t1 ~1 4.398 4.321 4.475 7.542 111.826 0.000
d_respe_1 ~~ d_respe_1 0.106 0.053 0.160 0.998 3.897 0.000
respe_t1 ~~ d_respe_1 -0.091 -0.149 -0.032 -0.482 -3.046 0.002
respe_t1 ~ frequ 0.118 0.000 0.235 0.149 1.959 0.050
d_respe_1 ~ frequ 0.019 -0.067 0.105 0.043 0.434 0.664
frequ ~~ frequ 0.548 0.385 0.711 1.000 6.602 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (current personality) is not significantly different from zero, b = 0.019, p = 0.664.

6.6.5.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9072.802 9162.688 0.955 0.056 0.044
# parameters of interest
params_lcs_trust_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.025 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.558 NA NA
d_trust_1 ~1 0.112 0.041 0.183 0.343 3.084 0.002
trust_t1 ~1 3.124 3.012 3.236 5.217 54.657 0.000
d_trust_1 ~~ d_trust_1 0.106 0.014 0.198 0.997 2.262 0.024
trust_t1 ~~ d_trust_1 -0.061 -0.122 0.000 -0.314 -1.968 0.049
d_trust_1 ~ sb07_06_t1 0.017 -0.049 0.083 0.052 0.506 0.613
sb07_06_t1 ~~ sb07_06_t1 0.997 0.906 1.089 1.000 21.378 0.000

The moderation effect of the facet-specific change goal with the trust change score (current personality) is not significantly different from zero, b = 0.017, p = 0.613.

6.6.5.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10674.33 10791.57 0.973 0.041 0.04
# parameters of interest
params_lcs_trust_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.026 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.555 NA NA
d_trust_1 ~1 0.111 0.040 0.182 0.345 3.071 0.002
trust_t1 ~1 3.124 3.012 3.236 5.239 54.566 0.000
d_trust_1 ~~ d_trust_1 0.102 0.013 0.191 0.984 2.246 0.025
trust_t1 ~~ d_trust_1 -0.065 -0.127 -0.002 -0.342 -2.032 0.042
trust_t1 ~ frequ 0.118 -0.004 0.239 0.146 1.895 0.058
d_trust_1 ~ frequ 0.056 -0.046 0.158 0.128 1.072 0.284
frequ ~~ frequ 0.545 0.384 0.707 1.000 6.615 0.000

The moderation effect of the self-improvement behaviors with the trust change score (current personality) is not significantly different from zero, b = 0.056, p = 0.284.

6.6.5.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8508.472 8598.358 0.945 0.088 0.045
# parameters of interest
params_lcs_organ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.078 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.539 NA NA
d_organ_1 ~1 0.145 0.064 0.226 0.270 3.508 0.000
organ_t1 ~1 3.140 3.028 3.251 2.926 55.139 0.000
d_organ_1 ~~ d_organ_1 0.271 0.150 0.392 0.943 4.402 0.000
organ_t1 ~~ d_organ_1 -0.143 -0.231 -0.054 -0.316 -3.156 0.002
d_organ_1 ~ sb07_07_t1 0.128 0.041 0.215 0.239 2.894 0.004
sb07_07_t1 ~~ sb07_07_t1 1.004 0.909 1.099 1.000 20.723 0.000

The facet-specific change goal significantly moderates changes in organization (current personality), b = 0.128, p = 0.004.

6.6.5.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10225.45 10342.7 0.983 0.042 0.035
# parameters of interest
params_lcs_organ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.077 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.542 NA NA
d_organ_1 ~1 0.138 0.059 0.216 0.267 3.444 0.001
organ_t1 ~1 3.136 3.000 3.271 3.066 45.336 0.000
d_organ_1 ~~ d_organ_1 0.264 0.149 0.380 0.997 4.480 0.000
organ_t1 ~~ d_organ_1 -0.211 -0.309 -0.112 -0.408 -4.198 0.000
organ_t1 ~ frequ 0.267 0.080 0.454 0.193 2.800 0.005
d_organ_1 ~ frequ 0.040 -0.077 0.157 0.057 0.669 0.504
frequ ~~ frequ 0.547 0.385 0.710 1.000 6.593 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (current personality) is not significantly different from zero, b = 0.04, p = 0.504.

6.6.5.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8493.978 8583.864 0.978 0.048 0.036
# parameters of interest
params_lcs_produ_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.050 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.509 NA NA
d_produ_1 ~1 0.155 0.087 0.222 0.410 4.496 0.000
produ_t1 ~1 2.622 2.509 2.736 3.365 45.253 0.000
d_produ_1 ~~ d_produ_1 0.138 0.069 0.206 0.964 3.916 0.000
produ_t1 ~~ d_produ_1 -0.073 -0.129 -0.016 -0.287 -2.526 0.012
d_produ_1 ~ sb07_08_t1 0.072 0.008 0.136 0.189 2.195 0.028
sb07_08_t1 ~~ sb07_08_t1 0.997 0.855 1.139 1.000 13.728 0.000

The facet-specific change goal significantly moderates changes in productiveness (current personality), b = 0.072, p = 0.028.

6.6.5.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10166.37 10283.61 0.976 0.044 0.043
# parameters of interest
params_lcs_produ_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.049 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.513 NA NA
d_produ_1 ~1 0.152 0.085 0.219 0.406 4.426 0.000
produ_t1 ~1 2.623 2.503 2.744 3.430 42.652 0.000
d_produ_1 ~~ d_produ_1 0.136 0.069 0.204 0.975 3.957 0.000
produ_t1 ~~ d_produ_1 -0.102 -0.166 -0.038 -0.364 -3.126 0.002
produ_t1 ~ frequ 0.129 -0.037 0.294 0.123 1.522 0.128
d_produ_1 ~ frequ 0.082 -0.014 0.177 0.160 1.674 0.094
frequ ~~ frequ 0.534 0.372 0.696 1.000 6.467 0.000

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score (current personality) is not significantly different from zero, b = 0.082, p = 0.094.

6.6.5.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8644.382 8734.268 0.915 0.083 0.082
# parameters of interest
params_lcs_respo_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.986 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.464 NA NA
d_respo_1 ~1 0.041 -0.004 0.085 0.199 1.785 0.074
respo_t1 ~1 3.626 3.531 3.720 8.341 75.374 0.000
d_respo_1 ~~ d_respo_1 0.042 0.005 0.079 0.996 2.203 0.028
respo_t1 ~~ d_respo_1 -0.016 -0.037 0.006 -0.198 -1.448 0.148
d_respo_1 ~ sb07_09_t1 0.012 -0.028 0.053 0.061 0.599 0.549
sb07_09_t1 ~~ sb07_09_t1 1.000 0.921 1.079 1.000 24.894 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (current personality) is not significantly different from zero, b = 0.012, p = 0.549.

6.6.5.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10307.13 10424.37 0.937 0.064 0.071
# parameters of interest
params_lcs_respo_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.985 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.463 NA NA
d_respo_1 ~1 0.042 -0.004 0.088 0.202 1.778 0.075
respo_t1 ~1 3.623 3.527 3.719 8.179 74.216 0.000
d_respo_1 ~~ d_respo_1 0.042 0.004 0.081 0.978 2.162 0.031
respo_t1 ~~ d_respo_1 -0.018 -0.043 0.006 -0.199 -1.452 0.147
respo_t1 ~ frequ -0.025 -0.114 0.065 -0.041 -0.534 0.593
d_respo_1 ~ frequ 0.042 -0.024 0.108 0.149 1.248 0.212
frequ ~~ frequ 0.547 0.384 0.709 1.000 6.577 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (current personality) is not significantly different from zero, b = 0.042, p = 0.212.

6.6.5.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8903.995 8993.88 0.968 0.055 0.046
# parameters of interest
params_lcs_anxie_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.074 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.674 NA NA
d_anxie_1 ~1 -0.207 -0.295 -0.120 -0.370 -4.631 0.000
anxie_t1 ~1 3.158 3.043 3.273 3.533 53.927 0.000
d_anxie_1 ~~ d_anxie_1 0.309 0.145 0.473 0.984 3.696 0.000
anxie_t1 ~~ d_anxie_1 -0.173 -0.276 -0.070 -0.431 -3.292 0.001
d_anxie_1 ~ sb07_10_t1 -0.071 -0.155 0.014 -0.126 -1.644 0.100
sb07_10_t1 ~~ sb07_10_t1 0.997 0.898 1.096 1.000 19.676 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (current personality) is not significantly different from zero, b = -0.071, p = 0.1.

6.6.5.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10632.01 10749.26 0.961 0.053 0.052
# parameters of interest
params_lcs_anxie_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.074 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.677 NA NA
d_anxie_1 ~1 -0.214 -0.304 -0.124 -0.375 -4.646 0.000
anxie_t1 ~1 3.157 3.031 3.282 3.488 49.331 0.000
d_anxie_1 ~~ d_anxie_1 0.319 0.137 0.501 0.980 3.442 0.001
anxie_t1 ~~ d_anxie_1 -0.208 -0.335 -0.081 -0.410 -3.217 0.001
anxie_t1 ~ frequ 0.154 -0.040 0.348 0.126 1.552 0.121
d_anxie_1 ~ frequ -0.109 -0.251 0.033 -0.141 -1.503 0.133
frequ ~~ frequ 0.547 0.383 0.711 1.000 6.536 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (current personality) is not significantly different from zero, b = -0.109, p = 0.133.

6.6.5.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8710.369 8800.255 0.966 0.069 0.051
# parameters of interest
params_lcs_depre_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.981 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.577 NA NA
d_depre_1 ~1 -0.145 -0.205 -0.085 -0.403 -4.757 0.000
depre_t1 ~1 3.039 2.933 3.146 4.966 55.973 0.000
d_depre_1 ~~ d_depre_1 0.129 0.071 0.186 0.993 4.379 0.000
depre_t1 ~~ d_depre_1 -0.045 -0.076 -0.013 -0.274 -2.776 0.006
d_depre_1 ~ sb07_11_t1 -0.031 -0.081 0.019 -0.086 -1.208 0.227
sb07_11_t1 ~~ sb07_11_t1 0.998 0.919 1.077 1.000 24.729 0.000

The moderation effect of the facet-specific change goal with the depression change score (current personality) is not significantly different from zero, b = -0.031, p = 0.227.

6.6.5.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10510.66 10627.9 0.949 0.07 0.06
# parameters of interest
params_lcs_depre_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.976 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.574 NA NA
d_depre_1 ~1 -0.150 -0.212 -0.088 -0.409 -4.730 0.000
depre_t1 ~1 3.036 2.924 3.149 4.880 52.784 0.000
d_depre_1 ~~ d_depre_1 0.133 0.073 0.194 0.998 4.347 0.000
depre_t1 ~~ d_depre_1 -0.057 -0.092 -0.022 -0.251 -3.184 0.001
depre_t1 ~ frequ 0.007 -0.114 0.128 0.008 0.109 0.913
d_depre_1 ~ frequ -0.022 -0.111 0.067 -0.044 -0.484 0.628
frequ ~~ frequ 0.545 0.381 0.709 1.000 6.512 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (current personality) is not significantly different from zero, b = -0.022, p = 0.628.

6.6.5.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8981.42 9071.306 0.984 0.042 0.031
# parameters of interest
params_lcs_volat_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.056 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.628 NA NA
d_volat_1 ~1 -0.173 -0.250 -0.097 -0.335 -4.454 0.000
volat_t1 ~1 3.229 3.110 3.348 3.705 53.188 0.000
d_volat_1 ~~ d_volat_1 0.262 0.171 0.354 0.977 5.639 0.000
volat_t1 ~~ d_volat_1 -0.151 -0.221 -0.081 -0.358 -4.229 0.000
d_volat_1 ~ sb07_12_t1 -0.080 -0.165 0.006 -0.153 -1.827 0.068
sb07_12_t1 ~~ sb07_12_t1 0.997 0.895 1.099 1.000 19.231 0.000

The moderation effect of the facet-specific change goal with the volatility change score (current personality) is not significantly different from zero, b = -0.08, p = 0.068.

6.6.5.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10621.4 10738.65 0.97 0.051 0.041
# parameters of interest
params_lcs_volat_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.057 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.628 NA NA
d_volat_1 ~1 -0.174 -0.250 -0.097 -0.335 -4.440 0.000
volat_t1 ~1 3.229 3.107 3.351 3.700 51.901 0.000
d_volat_1 ~~ d_volat_1 0.266 0.177 0.355 0.988 5.846 0.000
volat_t1 ~~ d_volat_1 -0.173 -0.244 -0.102 -0.385 -4.751 0.000
volat_t1 ~ frequ 0.038 -0.136 0.212 0.032 0.425 0.671
d_volat_1 ~ frequ -0.077 -0.208 0.053 -0.109 -1.163 0.245
frequ ~~ frequ 0.539 0.376 0.702 1.000 6.480 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (current personality) is significantly different from zero, b = -0.077, p = 0.245.

6.6.5.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8756.631 8846.517 0.966 0.046 0.048
# parameters of interest
params_lcs_curio_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.993 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.407 NA NA
d_curio_1 ~1 0.065 0.011 0.119 0.326 2.381 0.017
curio_t1 ~1 4.061 3.971 4.152 8.347 87.843 0.000
d_curio_1 ~~ d_curio_1 0.040 -0.010 0.089 0.996 1.576 0.115
curio_t1 ~~ d_curio_1 -0.017 -0.049 0.015 -0.178 -1.019 0.308
d_curio_1 ~ sb07_13_t1 0.012 -0.050 0.074 0.059 0.376 0.707
sb07_13_t1 ~~ sb07_13_t1 0.997 0.894 1.100 1.000 18.986 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (current personality) is not significantly different from zero, b = 0.012, p = 0.707.

6.6.5.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10366.74 10483.98 0.963 0.046 0.052
# parameters of interest
params_lcs_curio_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.991 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.406 NA NA
d_curio_1 ~1 0.065 0.012 0.118 0.325 2.407 0.016
curio_t1 ~1 4.061 3.969 4.153 8.301 86.403 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.010 0.086 0.944 1.539 0.124
curio_t1 ~~ d_curio_1 -0.022 -0.056 0.011 -0.236 -1.293 0.196
curio_t1 ~ frequ 0.119 0.009 0.228 0.177 2.127 0.033
d_curio_1 ~ frequ 0.065 -0.031 0.161 0.236 1.328 0.184
frequ ~~ frequ 0.531 0.369 0.692 1.000 6.440 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (current personality) is not significantly different from zero, b = 0.065, p = 0.184.

6.6.5.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_specif_hyp6 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
aesth_t1 ~ sb07_14_t1      # This estimates the moderation effect on personality at T1
d_aesth_1 ~ sb07_14_t1     # This estimates the moderation effect on the change score

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb07_14_t1 ~~ sb07_14_t1
sb07_14_t1 ~ 1
'

fit_mi_lcs_aesth_curr_specif_hyp6 <- lavaan(mi_lcs_aesth_curr_specif_hyp6, 
                                            data=df_sbsa_wide_pers_sb %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
Warning in lav_object_post_check(object): lavaan WARNING: covariance matrix of latent variables
                is not positive definite;
                use lavInspect(fit, "cov.lv") to investigate.
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_specif_hyp6, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 98 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        32
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               389.043     367.796
  Degrees of freedom                                32          32
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.058
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1061.777     828.089
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.282

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.652       0.576
  Tucker-Lewis Index (TLI)                       0.608       0.523
                                                                  
  Robust Comparative Fit Index (CFI)                         0.651
  Robust Tucker-Lewis Index (TLI)                            0.608

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4398.542   -4398.542
  Scaling correction factor                                  0.866
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4204.020   -4204.020
  Scaling correction factor                                  1.140
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8841.083    8841.083
  Bayesian (BIC)                              8924.730    8924.730
  Sample-size adjusted Bayesian (SABIC)       8854.945    8854.945

Root Mean Square Error of Approximation:

  RMSEA                                          0.184       0.178
  90 Percent confidence interval - lower         0.168       0.162
  90 Percent confidence interval - upper         0.200       0.194
  P-value H_0: RMSEA <= 0.050                    0.000       0.000
  P-value H_0: RMSEA >= 0.080                    1.000       1.000
                                                                  
  Robust RMSEA                                               0.183
  90 Percent confidence interval - lower                     0.167
  90 Percent confidence interval - upper                     0.200
  P-value H_0: Robust RMSEA <= 0.050                         0.000
  P-value H_0: Robust RMSEA >= 0.080                         1.000

Standardized Root Mean Square Residual:

  SRMR                                           0.205       0.205

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.006    0.005
    b05_20_ (lmb2)   -3.110    2.619   -1.187    0.235   -0.019   -0.018
    b05_35_ (lmb3)   -3.303    2.802   -1.179    0.239   -0.020   -0.020
    b05_50_ (lmb4)   -3.443    2.978   -1.156    0.248   -0.021   -0.016
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.159    0.120
    b05_20_ (lmb2)   -3.110    2.619   -1.187    0.235   -0.493   -0.428
    b05_35_ (lmb3)   -3.303    2.802   -1.179    0.239   -0.524   -0.465
    b05_50_ (lmb4)   -3.443    2.978   -1.156    0.248   -0.546   -0.386
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.833    0.833

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.039    0.039
  aesth_t1 ~                                                            
    sb07_14_t1       -0.006    0.021   -0.289    0.773   -1.000   -1.000
  d_aesth_1 ~                                                           
    sb07_14_t1       -0.022    0.024   -0.934    0.350   -0.169   -0.169

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .aesth_t1 ~~                                                           
   .d_aesth_1         0.004    0.006    0.595    0.552      Inf      Inf
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.543    0.106    5.128    0.000    0.543    0.314
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.733    0.095    7.686    0.000    0.733    0.674
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.638    0.084    7.577    0.000    0.638    0.642
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        1.184    0.107   11.087    0.000    1.184    0.694

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
   .d_aesth_1        -0.007    0.012   -0.589    0.556   -0.053   -0.053
   .aesth_t1          3.024    0.059   51.457    0.000  490.454  490.454
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   13.246    7.924    1.672    0.095   13.246   12.701
   .bf05_35_1 (m3)   13.837    8.471    1.634    0.102   13.837   13.875
   .bf05_50_1 (m4)   13.850    8.998    1.539    0.124   13.850   10.603
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   13.246    7.924    1.672    0.095   13.246   11.483
   .bf05_35_2 (m3)   13.837    8.471    1.634    0.102   13.837   12.286
   .bf05_50_2 (m4)   13.850    8.998    1.539    0.124   13.850    9.784
    sb07_14_1        -0.037    0.055   -0.662    0.508   -0.037   -0.037

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
   .d_sth_1           0.017    0.030    0.568    0.570    0.972    0.972
   .b05_05_ (res1)    1.729    0.073   23.777    0.000    1.729    1.000
   .b05_20_ (res2)    1.087    0.085   12.840    0.000    1.087    1.000
   .b05_35_ (res3)    0.994    0.076   13.118    0.000    0.994    1.000
   .b05_50_ (res4)    1.706    0.090   18.952    0.000    1.706    1.000
   .b05_05_ (res1)    1.729    0.073   23.777    0.000    1.729    0.986
   .b05_20_ (res2)    1.087    0.085   12.840    0.000    1.087    0.817
   .b05_35_ (res3)    0.994    0.076   13.118    0.000    0.994    0.784
   .b05_50_ (res4)    1.706    0.090   18.952    0.000    1.706    0.851
    s07_14_           0.999    0.047   21.066    0.000    0.999    1.000
   .asth_t1           0.000                               0.000    0.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 22 8841.083 8924.73 0.652 0.184 0.205
# parameters of interest
params_lcs_aesth_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.039 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.833 NA NA
d_aesth_1 ~1 -0.007 -0.030 0.016 -0.053 -0.589 0.556
aesth_t1 ~1 3.024 2.909 3.139 490.454 51.457 0.000
d_aesth_1 ~~ d_aesth_1 0.017 -0.042 0.076 0.972 0.568 0.570
aesth_t1 ~~ d_aesth_1 0.004 -0.008 0.016 Inf 0.595 0.552
d_aesth_1 ~ sb07_14_t1 -0.022 -0.069 0.024 -0.169 -0.934 0.350
sb07_14_t1 ~~ sb07_14_t1 0.999 0.906 1.092 1.000 21.066 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (current personality) is not significantly different from zero, b = -0.022, p = 0.35.

6.6.5.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_frequ_hyp6 <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

frequ =~ 1*sb04_01_t2 + sb04_02_t2 + sb04_03_t2 # latent variable for moderator

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
aesth_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_aesth_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sb04_01_t2 ~~ sb04_01_t2
sb04_02_t2 ~~ sb04_02_t2
sb04_03_t2 ~~ sb04_03_t2

sb04_01_t2 ~ 1
sb04_02_t2 ~ 1
sb04_03_t2 ~ 1
'

fit_mi_lcs_aesth_curr_frequ_hyp6 <- lavaan(mi_lcs_aesth_curr_frequ_hyp6, 
                                            data=df_sbsa_wide_pers_sb_mod %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_frequ_hyp6, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 221 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        40
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         1

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                54.322      49.992
  Degrees of freedom                                47          47
  P-value (Chi-square)                           0.216       0.355
  Scaling correction factor                                  1.087
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1359.657    1108.430
  Degrees of freedom                                55          55
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.227

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.994       0.997
  Tucker-Lewis Index (TLI)                       0.993       0.997
                                                                  
  Robust Comparative Fit Index (CFI)                         0.998
  Robust Tucker-Lewis Index (TLI)                            0.998

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5028.653   -5028.653
  Scaling correction factor                                  0.889
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -5001.492   -5001.492
  Scaling correction factor                                  1.125
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               10117.306   10117.306
  Bayesian (BIC)                             10231.369   10231.369
  Sample-size adjusted Bayesian (SABIC)      10136.208   10136.208

Root Mean Square Error of Approximation:

  RMSEA                                          0.022       0.014
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.044       0.039
  P-value H_0: RMSEA <= 0.050                    0.987       0.997
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.012
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.041
  P-value H_0: Robust RMSEA <= 0.050                         0.993
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.036       0.036

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.039    0.030
    b05_20_ (lmb2)  -23.507    1.119  -21.002    0.000   -0.917   -0.826
    b05_35_ (lmb3)  -22.131    1.102  -20.076    0.000   -0.863   -0.809
    b05_50_ (lmb4)  -18.112    1.379  -13.129    0.000   -0.706   -0.519
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.040    0.030
    b05_20_ (lmb2)  -23.507    1.119  -21.002    0.000   -0.940   -0.832
    b05_35_ (lmb3)  -22.131    1.102  -20.076    0.000   -0.885   -0.816
    b05_50_ (lmb4)  -18.112    1.379  -13.129    0.000   -0.724   -0.528
  frequ =~                                                              
    s04_01_           1.000                               0.732    0.733
    s04_02_           0.970    0.091   10.625    0.000    0.711    0.711
    s04_03_           1.030    0.093   11.094    0.000    0.754    0.754
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.585    0.585

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.975    0.975
  aesth_t1 ~                                                            
    frequ            -0.010    0.004   -2.398    0.016   -0.190   -0.190
  d_aesth_1 ~                                                           
    frequ            -0.005    0.003   -1.696    0.090   -0.156   -0.156

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .aesth_t1 ~~                                                           
   .d_aesth_1        -0.000    0.000   -2.785    0.005   -0.295   -0.295
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.550    0.106    5.210    0.000    0.550    0.316
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.122    0.065    1.890    0.059    0.122    0.312
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.097    0.059    1.640    0.101    0.097    0.246
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        0.816    0.099    8.267    0.000    0.816    0.602

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
   .d_aesth_1        -0.002    0.002   -0.916    0.360   -0.068   -0.068
   .aesth_t1          3.022    0.059   51.432    0.000   77.504   77.504
    frequ             0.000                               0.000    0.000
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   74.868    3.139   23.852    0.000   74.868   67.448
   .bf05_35_1 (m3)   70.721    3.253   21.742    0.000   70.721   66.295
   .bf05_50_1 (m4)   58.166    3.950   14.725    0.000   58.166   42.719
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   74.868    3.139   23.852    0.000   74.868   66.283
   .bf05_35_2 (m3)   70.721    3.253   21.742    0.000   70.721   65.194
   .bf05_50_2 (m4)   58.166    3.950   14.725    0.000   58.166   42.423
   .sb04_01_2        -0.011    0.055   -0.203    0.839   -0.011   -0.011
   .sb04_02_2         0.006    0.055    0.106    0.916    0.006    0.006
   .sb04_03_2         0.003    0.055    0.046    0.964    0.003    0.003

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
   .d_sth_1           0.001    0.000    3.864    0.000    0.976    0.976
   .asth_t1           0.001    0.000    9.324    0.000    0.964    0.964
    frequ             0.536    0.082    6.529    0.000    1.000    1.000
   .b05_05_ (res1)    1.742    0.070   24.777    0.000    1.742    0.999
   .b05_20_ (res2)    0.392    0.069    5.666    0.000    0.392    0.318
   .b05_35_ (res3)    0.393    0.059    6.690    0.000    0.393    0.346
   .b05_50_ (res4)    1.355    0.100   13.604    0.000    1.355    0.731
   .b05_05_ (res1)    1.742    0.070   24.777    0.000    1.742    0.999
   .b05_20_ (res2)    0.392    0.069    5.666    0.000    0.392    0.307
   .b05_35_ (res3)    0.393    0.059    6.690    0.000    0.393    0.334
   .b05_50_ (res4)    1.355    0.100   13.604    0.000    1.355    0.721
   .s04_01_           0.463    0.059    7.841    0.000    0.463    0.463
   .s04_02_           0.494    0.065    7.633    0.000    0.494    0.495
   .s04_03_           0.432    0.061    7.082    0.000    0.432    0.432
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 30 10117.31 10231.37 0.994 0.022 0.036
# parameters of interest
params_lcs_aesth_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.975 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.585 NA NA
d_aesth_1 ~1 -0.002 -0.005 0.002 -0.068 -0.916 0.360
aesth_t1 ~1 3.022 2.907 3.137 77.504 51.432 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.976 3.864 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.295 -2.785 0.005
aesth_t1 ~ frequ -0.010 -0.018 -0.002 -0.190 -2.398 0.016
d_aesth_1 ~ frequ -0.005 -0.011 0.001 -0.156 -1.696 0.090
frequ ~~ frequ 0.536 0.375 0.697 1.000 6.529 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (current personality) is not significantly different from zero, b = -0.005, p = 0.09.

6.6.5.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8553.105 8642.991 0.941 0.073 0.068
# parameters of interest
params_lcs_imagi_curr_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.969 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.472 NA NA
d_imagi_1 ~1 0.099 0.035 0.162 0.281 3.033 0.002
imagi_t1 ~1 3.568 3.471 3.664 4.958 72.317 0.000
d_imagi_1 ~~ d_imagi_1 0.119 0.040 0.198 0.966 2.942 0.003
imagi_t1 ~~ d_imagi_1 -0.033 -0.096 0.029 -0.138 -1.046 0.296
d_imagi_1 ~ sb07_15_t1 0.064 -0.001 0.130 0.183 1.926 0.054
sb07_15_t1 ~~ sb07_15_t1 0.998 0.909 1.086 1.000 22.152 0.000

The moderation effect of the facet-specific change goal with the imagination change score (current personality) is not significantly different from zero, b = 0.064, p = 0.054.

6.6.5.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10162.41 10279.65 0.965 0.051 0.055
# parameters of interest
params_lcs_imagi_curr_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.971 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.473 NA NA
d_imagi_1 ~1 0.098 0.034 0.163 0.279 2.982 0.003
imagi_t1 ~1 3.568 3.470 3.665 4.947 71.846 0.000
d_imagi_1 ~~ d_imagi_1 0.121 0.040 0.203 0.979 2.913 0.004
imagi_t1 ~~ d_imagi_1 -0.054 -0.120 0.011 -0.223 -1.628 0.104
imagi_t1 ~ frequ 0.232 0.083 0.382 0.234 3.050 0.002
d_imagi_1 ~ frequ 0.070 -0.037 0.176 0.144 1.285 0.199
frequ ~~ frequ 0.527 0.367 0.687 1.000 6.455 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (current personality) is not significantly different from zero, b = 0.07, p = 0.199.

6.6.6 Big Five facets (ideal personality)

6.6.6.1 Sociability - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8424.806 8514.692 0.978 0.037 0.042
# parameters of interest
params_lcs_socia_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sb07_01_t1", "sb07_01_t1 ~~ sb07_01_t1", "d_socia_1 ~ sb07_01_t1", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.956 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.479 NA NA
d_socia_1 ~1 -0.038 -0.092 0.016 -0.163 -1.395 0.163
socia_t1 ~1 4.186 4.108 4.264 8.890 105.234 0.000
d_socia_1 ~~ d_socia_1 0.055 0.000 0.111 0.999 1.968 0.049
socia_t1 ~~ d_socia_1 -0.019 -0.051 0.014 -0.176 -1.108 0.268
d_socia_1 ~ sb07_01_t1 0.008 -0.043 0.060 0.035 0.313 0.755
sb07_01_t1 ~~ sb07_01_t1 0.996 0.865 1.127 1.000 14.919 0.000

The moderation effect of the facet-specific change goal with the sociability change score (ideal personality) is not significantly different from zero, b = 0.008, p = 0.755.

6.6.6.2 Sociability - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10058.29 10175.54 0.959 0.048 0.057
# parameters of interest
params_lcs_socia_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 0.956 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.474 NA NA
d_socia_1 ~1 -0.036 -0.090 0.018 -0.154 -1.309 0.191
socia_t1 ~1 4.186 4.106 4.266 8.927 102.436 0.000
d_socia_1 ~~ d_socia_1 0.053 -0.001 0.108 0.986 1.924 0.054
socia_t1 ~~ d_socia_1 -0.018 -0.050 0.014 -0.165 -1.086 0.277
socia_t1 ~ frequ 0.055 -0.065 0.174 0.087 0.895 0.371
d_socia_1 ~ frequ 0.037 -0.047 0.121 0.118 0.864 0.387
frequ ~~ frequ 0.553 0.389 0.717 1.000 6.620 0.000

The moderation effect of the frequency of self-improvement behaviors with sociability change score (ideal personality) is not significantly different from zero, b = 0.037, p = 0.387.

6.6.6.3 Assertiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8813.252 8903.138 0.989 0.022 0.041
# parameters of interest
params_lcs_asser_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sb07_02_t1", "sb07_02_t1 ~~ sb07_02_t1", "d_asser_1 ~ sb07_02_t1", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.926 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.625 NA NA
d_asser_1 ~1 -0.035 -0.076 0.006 -0.160 -1.694 0.090
asser_t1 ~1 4.069 3.986 4.152 12.509 96.135 0.000
d_asser_1 ~~ d_asser_1 0.048 0.003 0.092 0.988 2.103 0.035
asser_t1 ~~ d_asser_1 -0.013 -0.034 0.008 -0.190 -1.209 0.227
d_asser_1 ~ sb07_02_t1 -0.025 -0.063 0.013 -0.112 -1.265 0.206
sb07_02_t1 ~~ sb07_02_t1 0.997 0.872 1.122 1.000 15.665 0.000

The moderation effect of the facet-specific change goal with the assertiveness change score (ideal personality) is not significantly different from zero, b = -0.025, p = 0.206.

6.6.6.4 Assertiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10419.24 10536.48 0.984 0.026 0.044
# parameters of interest
params_lcs_asser_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.928 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.623 NA NA
d_asser_1 ~1 -0.032 -0.070 0.005 -0.156 -1.681 0.093
asser_t1 ~1 4.068 3.983 4.153 13.216 93.715 0.000
d_asser_1 ~~ d_asser_1 0.043 0.004 0.082 0.999 2.144 0.032
asser_t1 ~~ d_asser_1 -0.013 -0.032 0.006 -0.223 -1.345 0.178
asser_t1 ~ frequ 0.153 0.061 0.246 0.364 3.257 0.001
d_asser_1 ~ frequ -0.006 -0.069 0.056 -0.023 -0.202 0.840
frequ ~~ frequ 0.536 0.371 0.700 1.000 6.394 0.000

The moderation effect of the frequency of self-improvement behaviors with the assertiveness change score (ideal personality) is not significantly different from zero, b = -0.006, p = 0.84.

6.6.6.5 Energy - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8377.319 8467.205 0.954 0.043 0.046
# parameters of interest
params_lcs_energ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sb07_03_t1", "sb07_03_t1 ~~ sb07_03_t1", "d_energ_1 ~ sb07_03_t1", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.943 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.679 NA NA
d_energ_1 ~1 -0.016 -0.062 0.030 -0.061 -0.670 0.503
energ_t1 ~1 3.744 3.637 3.852 10.518 68.220 0.000
d_energ_1 ~~ d_energ_1 0.063 0.003 0.123 0.959 2.067 0.039
energ_t1 ~~ d_energ_1 -0.021 -0.058 0.016 -0.240 -1.116 0.264
d_energ_1 ~ sb07_03_t1 -0.052 -0.108 0.003 -0.204 -1.849 0.064
sb07_03_t1 ~~ sb07_03_t1 0.998 0.861 1.135 1.000 14.282 0.000

The moderation effect of the facet-specific change goal with the energy change score (ideal personality) is not significantly different from zero, b = -0.052, p = 0.064.

6.6.6.6 Energy - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9989.474 10106.72 0.951 0.046 0.054
# parameters of interest
params_lcs_energ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.940 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.676 NA NA
d_energ_1 ~1 -0.015 -0.060 0.029 -0.062 -0.672 0.501
energ_t1 ~1 3.744 3.637 3.852 10.821 68.283 0.000
d_energ_1 ~~ d_energ_1 0.061 0.002 0.121 0.992 2.020 0.043
energ_t1 ~~ d_energ_1 -0.024 -0.062 0.014 -0.286 -1.246 0.213
energ_t1 ~ frequ 0.072 -0.007 0.150 0.153 1.792 0.073
d_energ_1 ~ frequ 0.031 -0.044 0.106 0.091 0.803 0.422
frequ ~~ frequ 0.548 0.386 0.710 1.000 6.635 0.000

The moderation effect of the frequency of self-improvement behaviors with the energy change score (ideal personality) is not significantly different from zero, b = 0.031, p = 0.422.

6.6.6.7 Compassion - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 9116.295 9206.181 0.988 0.021 0.041
# parameters of interest
params_lcs_compa_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sb07_04_t1", "sb07_04_t1 ~~ sb07_04_t1", "d_compa_1 ~ sb07_04_t1", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.085 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.741 NA NA
d_compa_1 ~1 0.016 -0.067 0.098 0.033 0.374 0.708
compa_t1 ~1 4.181 4.087 4.275 6.047 87.274 0.000
d_compa_1 ~~ d_compa_1 0.222 0.093 0.352 0.998 3.364 0.001
compa_t1 ~~ d_compa_1 -0.145 -0.244 -0.045 -0.449 -2.852 0.004
d_compa_1 ~ sb07_04_t1 0.023 -0.069 0.116 0.050 0.499 0.618
sb07_04_t1 ~~ sb07_04_t1 0.997 0.904 1.090 1.000 21.048 0.000

The moderation effect of the facet-specific change goal with the compassion change score (ideal personality) is not significantly different from zero, b = 0.023, p = 0.618.

6.6.6.8 Compassion - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10724.46 10841.7 0.981 0.028 0.044
# parameters of interest
params_lcs_compa_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.085 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.741 NA NA
d_compa_1 ~1 0.015 -0.067 0.098 0.032 0.360 0.719
compa_t1 ~1 4.181 4.086 4.275 6.026 86.584 0.000
d_compa_1 ~~ d_compa_1 0.221 0.089 0.353 0.986 3.275 0.001
compa_t1 ~~ d_compa_1 -0.152 -0.256 -0.049 -0.469 -2.877 0.004
compa_t1 ~ frequ 0.093 -0.071 0.257 0.099 1.111 0.266
d_compa_1 ~ frequ 0.076 -0.059 0.212 0.119 1.105 0.269
frequ ~~ frequ 0.549 0.387 0.710 1.000 6.650 0.000

The moderation effect of the frequency of self-improvement behaviors with the compassion change score (ideal personality) is not significantly different from zero, b = 0.076, p = 0.269.

6.6.6.9 Respectfulness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7425.722 7515.608 0.904 0.072 0.065
# parameters of interest
params_lcs_respe_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sb07_05_t1", "sb07_05_t1 ~~ sb07_05_t1", "d_respe_1 ~ sb07_05_t1", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.242 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.820 NA NA
d_respe_1 ~1 0.041 -0.012 0.095 0.136 1.506 0.132
respe_t1 ~1 4.618 4.551 4.685 10.006 135.165 0.000
d_respe_1 ~~ d_respe_1 0.093 0.007 0.179 0.997 2.113 0.035
respe_t1 ~~ d_respe_1 -0.085 -0.160 -0.009 -0.607 -2.203 0.028
d_respe_1 ~ sb07_05_t1 -0.016 -0.070 0.038 -0.053 -0.579 0.563
sb07_05_t1 ~~ sb07_05_t1 0.997 0.885 1.110 1.000 17.359 0.000

The moderation effect of the facet-specific change goal with the respectfulness change score (ideal personality) is not significantly different from zero, b = -0.016, p = 0.563.

6.6.6.10 Respectfulness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9035.195 9152.437 0.93 0.06 0.059
# parameters of interest
params_lcs_respe_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.243 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.818 NA NA
d_respe_1 ~1 0.041 -0.013 0.094 0.135 1.491 0.136
respe_t1 ~1 4.618 4.551 4.686 10.067 134.882 0.000
d_respe_1 ~~ d_respe_1 0.091 0.007 0.175 0.998 2.123 0.034
respe_t1 ~~ d_respe_1 -0.082 -0.156 -0.007 -0.598 -2.138 0.032
respe_t1 ~ frequ 0.100 0.005 0.195 0.162 2.074 0.038
d_respe_1 ~ frequ -0.019 -0.093 0.055 -0.047 -0.502 0.616
frequ ~~ frequ 0.553 0.390 0.716 1.000 6.651 0.000

The moderation effect of the frequency of self-improvement behaviors with the respectfulness change score (ideal personality) is not significantly different from zero, b = -0.019, p = 0.616.

6.6.6.11 Trust - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8683.081 8772.967 0.971 0.039 0.039
# parameters of interest
params_lcs_trust_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sb07_06_t1", "sb07_06_t1 ~~ sb07_06_t1", "d_trust_1 ~ sb07_06_t1", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.994 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.609 NA NA
d_trust_1 ~1 0.020 -0.025 0.066 0.083 0.873 0.382
trust_t1 ~1 4.038 3.951 4.126 10.145 90.697 0.000
d_trust_1 ~~ d_trust_1 0.058 0.008 0.108 0.976 2.281 0.023
trust_t1 ~~ d_trust_1 -0.026 -0.059 0.006 -0.276 -1.571 0.116
d_trust_1 ~ sb07_06_t1 -0.038 -0.084 0.008 -0.154 -1.605 0.109
sb07_06_t1 ~~ sb07_06_t1 0.997 0.906 1.089 1.000 21.388 0.000

The moderation effect of the facet-specific change goal with the trust change score (ideal personality) is not significantly different from zero, b = -0.038, p = 0.109.

6.6.6.12 Trust - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10294.25 10411.49 0.99 0.022 0.037
# parameters of interest
params_lcs_trust_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.994 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.607 NA NA
d_trust_1 ~1 0.020 -0.027 0.067 0.081 0.844 0.398
trust_t1 ~1 4.039 3.951 4.126 9.952 90.348 0.000
d_trust_1 ~~ d_trust_1 0.061 0.010 0.113 1.000 2.352 0.019
trust_t1 ~~ d_trust_1 -0.030 -0.064 0.004 -0.300 -1.714 0.086
trust_t1 ~ frequ 0.089 -0.001 0.180 0.164 1.928 0.054
d_trust_1 ~ frequ 0.001 -0.066 0.068 0.002 0.022 0.983
frequ ~~ frequ 0.554 0.392 0.716 1.000 6.703 0.000

The moderation effect of the self-improvement behaviors with the trust change score (ideal personality) is not significantly different from zero, b = 0.001, p = 0.983.

6.6.6.13 Organization - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7600.145 7690.031 0.923 0.054 0.062
# parameters of interest
params_lcs_organ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sb07_07_t1", "sb07_07_t1 ~~ sb07_07_t1", "d_organ_1 ~ sb07_07_t1", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.049 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.796 NA NA
d_organ_1 ~1 0.042 -0.021 0.104 0.125 1.306 0.192
organ_t1 ~1 4.289 4.191 4.388 9.760 85.560 0.000
d_organ_1 ~~ d_organ_1 0.111 0.041 0.180 0.995 3.118 0.002
organ_t1 ~~ d_organ_1 -0.065 -0.118 -0.012 -0.445 -2.402 0.016
d_organ_1 ~ sb07_07_t1 -0.024 -0.085 0.038 -0.070 -0.754 0.451
sb07_07_t1 ~~ sb07_07_t1 0.997 0.904 1.090 1.000 21.051 0.000

The moderation effect of the facet-specific change goal with the organization change score (ideal personality) is not significantly different from zero, b = -0.024, p = 0.451.

6.6.6.14 Organization - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9204.022 9321.265 0.947 0.047 0.056
# parameters of interest
params_lcs_organ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.052 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.797 NA NA
d_organ_1 ~1 0.042 -0.021 0.105 0.126 1.315 0.189
organ_t1 ~1 4.289 4.191 4.387 9.739 85.487 0.000
d_organ_1 ~~ d_organ_1 0.111 0.042 0.180 0.998 3.156 0.002
organ_t1 ~~ d_organ_1 -0.064 -0.116 -0.011 -0.443 -2.386 0.017
organ_t1 ~ frequ 0.110 0.008 0.211 0.184 2.116 0.034
d_organ_1 ~ frequ -0.018 -0.099 0.063 -0.040 -0.440 0.660
frequ ~~ frequ 0.546 0.384 0.708 1.000 6.608 0.000

The moderation effect of the frequency of self-improvement behaviors with the organization change score (ideal personality) is not significantly different from zero (at p < .001), b = -0.018, p = 0.66.

6.6.6.15 Productiveness - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7128.728 7218.614 0.934 0.055 0.053
# parameters of interest
params_lcs_produ_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sb07_08_t1", "sb07_08_t1 ~~ sb07_08_t1", "d_produ_1 ~ sb07_08_t1", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.205 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.877 NA NA
d_produ_1 ~1 0.021 -0.031 0.074 0.066 0.803 0.422
produ_t1 ~1 4.365 4.285 4.446 9.856 105.761 0.000
d_produ_1 ~~ d_produ_1 0.103 0.029 0.178 0.994 2.720 0.007
produ_t1 ~~ d_produ_1 -0.081 -0.134 -0.029 -0.574 -3.067 0.002
d_produ_1 ~ sb07_08_t1 -0.026 -0.086 0.035 -0.079 -0.827 0.408
sb07_08_t1 ~~ sb07_08_t1 0.997 0.855 1.140 1.000 13.720 0.000

The moderation effect of the facet-specific change goal with the productiveness change score (ideal personality) is not significantly different from zero, b = -0.026, p = 0.408.

6.6.6.16 Productiveness - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 8730.909 8848.151 0.953 0.046 0.049
# parameters of interest
params_lcs_produ_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.204 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.878 NA NA
d_produ_1 ~1 0.021 -0.031 0.074 0.066 0.803 0.422
produ_t1 ~1 4.365 4.284 4.447 9.852 105.516 0.000
d_produ_1 ~~ d_produ_1 0.104 0.029 0.179 0.999 2.718 0.007
produ_t1 ~~ d_produ_1 -0.083 -0.137 -0.030 -0.590 -3.063 0.002
produ_t1 ~ frequ 0.095 0.005 0.186 0.159 2.059 0.039
d_produ_1 ~ frequ 0.012 -0.070 0.095 0.028 0.294 0.769
frequ ~~ frequ 0.549 0.386 0.711 1.000 6.625 0.000

The moderation effect of the frequency of self-improvement behaviors with the productiveness change score (ideal personality) is not significantly different from zero, b = 0.012, p = 0.769.

6.6.6.17 Responsibility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8014.435 8104.321 0.986 0.025 0.04
# parameters of interest
params_lcs_respo_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sb07_09_t1", "sb07_09_t1 ~~ sb07_09_t1", "d_respo_1 ~ sb07_09_t1", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.004 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.614 NA NA
d_respo_1 ~1 -0.018 -0.077 0.040 -0.066 -0.610 0.542
respo_t1 ~1 4.231 4.128 4.335 9.313 80.314 0.000
d_respo_1 ~~ d_respo_1 0.077 0.025 0.128 0.994 2.932 0.003
respo_t1 ~~ d_respo_1 -0.039 -0.081 0.003 -0.309 -1.802 0.072
d_respo_1 ~ sb07_09_t1 0.021 -0.038 0.080 0.076 0.699 0.484
sb07_09_t1 ~~ sb07_09_t1 0.997 0.919 1.075 1.000 25.008 0.000

The moderation effect of the facet-specific change goal with the responsibility change score (ideal personality) is not significantly different from zero, b = 0.021, p = 0.484.

6.6.6.18 Responsibility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9622.263 9739.506 0.976 0.033 0.045
# parameters of interest
params_lcs_respo_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.002 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.614 NA NA
d_respo_1 ~1 -0.019 -0.077 0.040 -0.068 -0.633 0.527
respo_t1 ~1 4.232 4.128 4.335 9.366 80.350 0.000
d_respo_1 ~~ d_respo_1 0.077 0.025 0.128 1.000 2.933 0.003
respo_t1 ~~ d_respo_1 -0.039 -0.082 0.004 -0.310 -1.758 0.079
respo_t1 ~ frequ 0.066 -0.040 0.172 0.108 1.225 0.221
d_respo_1 ~ frequ -0.006 -0.098 0.085 -0.017 -0.138 0.890
frequ ~~ frequ 0.549 0.386 0.711 1.000 6.611 0.000

The moderation effect of the frequency of self-improvement behaviors with the responsibility change score (ideal personality) is not significantly different from zero, b = -0.006, p = 0.89.

6.6.6.19 Anxiety - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8714.798 8804.684 0.976 0.027 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sb07_10_t1", "sb07_10_t1 ~~ sb07_10_t1", "d_anxie_1 ~ sb07_10_t1", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.181 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.859 NA NA
d_anxie_1 ~1 -0.038 -0.080 0.004 -0.168 -1.754 0.079
anxie_t1 ~1 1.447 1.381 1.513 4.675 42.968 0.000
d_anxie_1 ~~ d_anxie_1 0.050 -0.002 0.103 0.992 1.879 0.060
anxie_t1 ~~ d_anxie_1 -0.038 -0.080 0.003 -0.555 -1.825 0.068
d_anxie_1 ~ sb07_10_t1 -0.020 -0.057 0.017 -0.088 -1.058 0.290
sb07_10_t1 ~~ sb07_10_t1 0.997 0.897 1.097 1.000 19.607 0.000

The moderation effect of the facet-specific change goal with the anxiety change score (ideal personality) is not significantly different from zero, b = -0.02, p = 0.29.

6.6.6.20 Anxiety - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10322.17 10439.41 0.985 0.023 0.046
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.182 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.860 NA NA
d_anxie_1 ~1 -0.038 -0.081 0.005 -0.168 -1.745 0.081
anxie_t1 ~1 1.447 1.381 1.513 4.641 42.858 0.000
d_anxie_1 ~~ d_anxie_1 0.051 -0.002 0.103 0.983 1.880 0.060
anxie_t1 ~~ d_anxie_1 -0.040 -0.082 0.003 -0.565 -1.843 0.065
anxie_t1 ~ frequ -0.004 -0.075 0.067 -0.010 -0.120 0.905
d_anxie_1 ~ frequ -0.040 -0.110 0.030 -0.130 -1.111 0.267
frequ ~~ frequ 0.557 0.391 0.722 1.000 6.599 0.000

The moderation effect of the frequency of self-improvement behaviors with the anxiety change score (ideal personality) is not significantly different from zero, b = -0.04, p = 0.267.

6.6.6.21 Depression - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7126.976 7216.862 0.954 0.048 0.048
# parameters of interest
params_lcs_depre_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sb07_11_t1", "sb07_11_t1 ~~ sb07_11_t1", "d_depre_1 ~ sb07_11_t1", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.063 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.817 NA NA
d_depre_1 ~1 -0.026 -0.077 0.024 -0.081 -1.021 0.307
depre_t1 ~1 1.592 1.520 1.663 3.781 43.723 0.000
d_depre_1 ~~ d_depre_1 0.105 0.044 0.165 0.998 3.412 0.001
depre_t1 ~~ d_depre_1 -0.063 -0.111 -0.014 -0.461 -2.539 0.011
d_depre_1 ~ sb07_11_t1 0.013 -0.037 0.062 0.039 0.494 0.621
sb07_11_t1 ~~ sb07_11_t1 0.997 0.918 1.077 1.000 24.582 0.000

The moderation effect of the facet-specific change goal with the depression change score (ideal personality) is not significantly different from zero, b = 0.013, p = 0.621.

6.6.6.22 Depression - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 8729.871 8847.113 0.968 0.04 0.046
# parameters of interest
params_lcs_depre_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.816 NA NA
d_depre_1 ~1 -0.027 -0.078 0.024 -0.083 -1.043 0.297
depre_t1 ~1 1.592 1.521 1.663 3.740 43.695 0.000
d_depre_1 ~~ d_depre_1 0.107 0.045 0.168 0.996 3.381 0.001
depre_t1 ~~ d_depre_1 -0.065 -0.114 -0.016 -0.472 -2.581 0.010
depre_t1 ~ frequ -0.076 -0.173 0.021 -0.133 -1.538 0.124
d_depre_1 ~ frequ -0.028 -0.112 0.056 -0.064 -0.656 0.512
frequ ~~ frequ 0.554 0.392 0.717 1.000 6.692 0.000

The moderation effect of the frequency of self-improvement behaviors with the depression change score (ideal personality) is not significantly different from zero, b = -0.028, p = 0.512.

6.6.6.23 Volatility - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8138.691 8228.577 0.912 0.06 0.059
# parameters of interest
params_lcs_volat_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sb07_12_t1", "sb07_12_t1 ~~ sb07_12_t1", "d_volat_1 ~ sb07_12_t1", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.943 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.587 NA NA
d_volat_1 ~1 -0.008 -0.072 0.056 -0.027 -0.254 0.800
volat_t1 ~1 1.709 1.625 1.792 3.491 40.117 0.000
d_volat_1 ~~ d_volat_1 0.092 0.024 0.161 0.994 2.633 0.008
volat_t1 ~~ d_volat_1 -0.030 -0.078 0.018 -0.205 -1.241 0.215
d_volat_1 ~ sb07_12_t1 -0.024 -0.086 0.039 -0.077 -0.743 0.458
sb07_12_t1 ~~ sb07_12_t1 0.997 0.896 1.099 1.000 19.223 0.000

The moderation effect of the facet-specific change goal with the volatility change score (ideal personality) is not significantly different from zero, b = -0.024, p = 0.458.

6.6.6.24 Volatility - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9743.732 9860.975 0.955 0.044 0.051
# parameters of interest
params_lcs_volat_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.943 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.589 NA NA
d_volat_1 ~1 -0.008 -0.072 0.056 -0.027 -0.248 0.804
volat_t1 ~1 1.709 1.625 1.792 3.550 39.968 0.000
d_volat_1 ~~ d_volat_1 0.087 0.021 0.153 0.960 2.583 0.010
volat_t1 ~~ d_volat_1 -0.033 -0.080 0.014 -0.233 -1.381 0.167
volat_t1 ~ frequ -0.049 -0.148 0.050 -0.075 -0.965 0.335
d_volat_1 ~ frequ -0.081 -0.174 0.012 -0.199 -1.704 0.088
frequ ~~ frequ 0.544 0.383 0.704 1.000 6.649 0.000

The moderation effect of the frequency of self-improvement behaviors with the volatility change score (ideal personality) is not significantly different from zero, b = -0.081, p = 0.088.

6.6.6.25 Curiosity - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8796.096 8885.982 0.982 0.026 0.04
# parameters of interest
params_lcs_curio_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sb07_13_t1", "sb07_13_t1 ~~ sb07_13_t1", "d_curio_1 ~ sb07_13_t1", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.010 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.049 NA NA
d_curio_1 ~1 0.002 -0.040 0.044 0.132 0.105 0.916
curio_t1 ~1 4.434 4.362 4.506 12.409 120.391 0.000
d_curio_1 ~~ d_curio_1 0.000 -0.036 0.036 -0.182 -0.003 0.998
curio_t1 ~~ d_curio_1 -0.001 -0.025 0.024 -0.209 -0.044 0.965
d_curio_1 ~ sb07_13_t1 0.019 -0.036 0.073 1.087 0.674 0.500
sb07_13_t1 ~~ sb07_13_t1 0.997 0.894 1.100 1.000 18.985 0.000

The moderation effect of the facet-specific change goal with the curiosity change score (ideal personality) is not significantly different from zero, b = 0.019, p = 0.5.

6.6.6.26 Curiosity - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10398.9 10516.15 0.999 0.006 0.039
# parameters of interest
params_lcs_curio_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.010 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.077 NA NA
d_curio_1 ~1 0.002 -0.041 0.046 0.089 0.112 0.910
curio_t1 ~1 4.434 4.362 4.506 12.103 120.871 0.000
d_curio_1 ~~ d_curio_1 0.000 -0.038 0.038 -0.028 -0.001 0.999
curio_t1 ~~ d_curio_1 -0.003 -0.030 0.023 -2.024 -0.252 0.801
curio_t1 ~ frequ 0.085 -0.015 0.185 0.169 1.666 0.096
d_curio_1 ~ frequ 0.039 -0.026 0.103 1.014 1.180 0.238
frequ ~~ frequ 0.530 0.369 0.691 1.000 6.461 0.000

The moderation effect of the frequency of self-improvement behaviors with the curiosity change score (ideal personality) is not significantly different from zero, b = 0.039, p = 0.238.

6.6.6.27 Aesthetic - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8883.384 8973.27 1 0 0.03
# parameters of interest
params_lcs_aesth_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sb07_14_t1", "sb07_14_t1 ~~ sb07_14_t1", "d_aesth_1 ~ sb07_14_t1", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.929 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.576 NA NA
d_aesth_1 ~1 0.007 -0.007 0.022 0.096 1.014 0.311
aesth_t1 ~1 2.893 2.769 3.017 23.187 45.738 0.000
d_aesth_1 ~~ d_aesth_1 0.006 -0.006 0.017 0.974 0.991 0.322
aesth_t1 ~~ d_aesth_1 -0.002 -0.006 0.002 -0.210 -0.895 0.371
d_aesth_1 ~ sb07_14_t1 -0.013 -0.032 0.007 -0.162 -1.265 0.206
sb07_14_t1 ~~ sb07_14_t1 0.998 0.910 1.085 1.000 22.326 0.000

The moderation effect of the facet-specific change goal with the aesthetic change score (ideal personality) is not significantly different from zero, b = -0.013, p = 0.206.

6.6.6.28 Aesthetic - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 10491.15 10608.39 1 0 0.035
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.923 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.573 NA NA
d_aesth_1 ~1 0.008 -0.007 0.022 0.105 1.052 0.293
aesth_t1 ~1 2.894 2.769 3.018 24.382 45.645 0.000
d_aesth_1 ~~ d_aesth_1 0.005 -0.006 0.017 1.000 0.939 0.348
aesth_t1 ~~ d_aesth_1 -0.002 -0.005 0.002 -0.183 -0.844 0.399
aesth_t1 ~ frequ -0.041 -0.091 0.009 -0.251 -1.609 0.108
d_aesth_1 ~ frequ -0.002 -0.021 0.016 -0.022 -0.232 0.817
frequ ~~ frequ 0.526 0.368 0.685 1.000 6.496 0.000

The moderation effect of the frequency of self-improvement behaviors with the aesthetic change score (ideal personality) is not significantly different from zero, b = -0.002, p = 0.817.

6.6.6.29 Imagination - specific, facet-level change goal as moderator of change

Results summary (sb07_xx_t1 = trait/facet specific change goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8005.305 8095.191 0.931 0.054 0.056
# parameters of interest
params_lcs_imagi_ideal_specif_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sb07_15_t1", "sb07_15_t1 ~~ sb07_15_t1", "d_imagi_1 ~ sb07_15_t1", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.120 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.959 NA NA
d_imagi_1 ~1 0.021 -0.044 0.086 0.049 0.632 0.527
imagi_t1 ~1 4.562 4.496 4.629 9.090 134.366 0.000
d_imagi_1 ~~ d_imagi_1 0.183 0.052 0.314 0.989 2.735 0.006
imagi_t1 ~~ d_imagi_1 -0.115 -0.221 -0.009 -0.541 -2.135 0.033
d_imagi_1 ~ sb07_15_t1 -0.044 -0.106 0.017 -0.103 -1.406 0.160
sb07_15_t1 ~~ sb07_15_t1 0.997 0.909 1.085 1.000 22.163 0.000

The moderation effect of the facet-specific change goal with the imagination change score (ideal personality) is not significantly different from zero, b = -0.044, p = 0.16.

6.6.6.30 Imagination - frequency of self-improvement behaviors as moderator of change

Results summary (frequ = frequency of self-improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp6) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 30 9606.154 9723.397 0.959 0.042 0.05
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp6 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp6, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp6, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.120 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.959 NA NA
d_imagi_1 ~1 0.021 -0.044 0.086 0.049 0.628 0.530
imagi_t1 ~1 4.563 4.496 4.630 9.110 133.626 0.000
d_imagi_1 ~~ d_imagi_1 0.182 0.049 0.315 0.988 2.675 0.007
imagi_t1 ~~ d_imagi_1 -0.121 -0.228 -0.014 -0.574 -2.222 0.026
imagi_t1 ~ frequ 0.109 -0.016 0.234 0.159 1.711 0.087
d_imagi_1 ~ frequ 0.064 -0.057 0.186 0.109 1.036 0.300
frequ ~~ frequ 0.533 0.374 0.693 1.000 6.553 0.000

The moderation effect of the frequency of self-improvement behaviors with the imagination change score (ideal personality) is not significantly different from zero, b = 0.064, p = 0.3.

6.6.7 Hyp 6: Effects summary

6.6.7.1 Summary: Current personality

Gather all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6 <- df_table_hyp6_main %>% left_join(df_table_hyp6_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals 0.134 0.380 0.000 0.156 0.264 0.022
extraversion Frequency 0.132 0.381 0.000 0.038 0.080 0.361
agreeableness Goals 0.075 0.355 0.000 0.069 0.198 0.057
agreeableness Frequency 0.078 0.358 0.000 0.048 0.164 0.108
conscientiousness Goals 0.123 0.342 0.000 0.085 0.195 0.010
conscientiousness Frequency 0.124 0.342 0.000 0.064 0.130 0.079
neuroticism Goals -0.211 -0.425 0.000 -0.070 -0.108 0.153
neuroticism Frequency -0.211 -0.429 0.000 -0.077 -0.115 0.157
openness Goals 0.058 0.294 0.001 0.119 0.290 0.007
openness Frequency 0.056 0.291 0.002 0.068 0.254 0.032

Four moderator effects significantly differ from zero:

  • changes in current-level extraversion are moderated by the trait-specific change goals
  • changes in current-level conscientiousness are moderated by the trait-specific change goals
  • changes in current-level openness are moderated by the trait-specific change goals
  • changes in current-level openness are moderated by the frequency of self-improvement behaviors

Results summary across the Big Five facets: trait-specific change goals (Goals) and frequency of self-improvement behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals 0.184 0.345 0.000 0.084 0.158 0.033
sociability Frequency 0.179 0.340 0.000 -0.011 -0.016 0.858
assertiveness Goals 0.059 0.235 0.036 0.045 0.177 0.124
assertiveness Frequency 0.056 0.228 0.039 0.055 0.163 0.216
energy Goals 0.085 0.412 0.000 0.024 0.118 0.134
energy Frequency 0.091 0.418 0.000 0.025 0.082 0.466
compassion Goals 0.103 0.413 0.002 0.052 0.207 0.123
compassion Frequency 0.103 0.416 0.002 0.083 0.247 0.102
respectfulness Goals 0.067 0.200 0.017 0.102 0.307 0.001
respectfulness Frequency 0.065 0.199 0.019 0.019 0.043 0.664
trust Goals 0.112 0.343 0.002 0.017 0.052 0.613
trust Frequency 0.111 0.345 0.002 0.056 0.128 0.284
organization Goals 0.145 0.270 0.000 0.128 0.239 0.004
organization Frequency 0.138 0.267 0.001 0.040 0.057 0.504
productiveness Goals 0.155 0.410 0.000 0.072 0.189 0.028
productiveness Frequency 0.152 0.406 0.000 0.082 0.160 0.094
responsibility Goals 0.041 0.199 0.074 0.012 0.061 0.549
responsibility Frequency 0.042 0.202 0.075 0.042 0.149 0.212
anxiety Goals -0.207 -0.370 0.000 -0.071 -0.126 0.100
anxiety Frequency -0.214 -0.375 0.000 -0.109 -0.141 0.133
depression Goals -0.145 -0.403 0.000 -0.031 -0.086 0.227
depression Frequency -0.150 -0.409 0.000 -0.022 -0.044 0.628
volatility Goals -0.173 -0.335 0.000 -0.080 -0.153 0.068
volatility Frequency -0.174 -0.335 0.000 -0.077 -0.109 0.245
curiosity Goals 0.065 0.326 0.017 0.012 0.059 0.707
curiosity Frequency 0.065 0.325 0.016 0.065 0.236 0.184
aesthetic Goals -0.007 -0.053 0.556 -0.022 -0.169 0.350
aesthetic Frequency -0.002 -0.068 0.360 -0.005 -0.156 0.090
imagination Goals 0.099 0.281 0.002 0.064 0.183 0.054
imagination Frequency 0.098 0.279 0.003 0.070 0.144 0.199

Looking at the facets, we find three moderator effects that significantly differ from zero (at p < .05):

  • Within extraversion, we find a significant moderation effect of the change goal for the facet sociability.
  • Within agreeableness, we find a significant moderation effect of the change goal in the facets respectfulness, organization, and productiveness (although partly in an unexpected direction).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_curr_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_curr_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_curr_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_curr_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_curr_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_curr_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_curr_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_curr_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_curr_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_curr_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_curr_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_curr_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot <- df_table_hyp6_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Current", levels = c("Current"), labels = c("Current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses:

  • Current = current-level personality
  • Goals = specific, facet-level change goal(s) as moderator
  • Frequency = frequency of self-improvement behavior as moderator
Show the code
ggplot(df_table_hyp6_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.6.7.2 Summary: Ideal personality

Run models for all facets with a template & loop:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp6_ideal_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp6_ideal_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp6_ideal <- df_table_hyp6_ideal_main %>% left_join(df_table_hyp6_ideal_mod)

Results summary across the Big Five traits: trait-specific change goals (goals) and frequency of self-improvement behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals -0.029 -0.099 0.258 -0.002 -0.004 0.978
extraversion Frequency -0.028 -0.095 0.277 0.034 0.086 0.412
agreeableness Goals 0.032 0.115 0.101 -0.039 -0.091 0.302
agreeableness Frequency 0.032 0.114 0.105 -0.005 -0.013 0.872
conscientiousness Goals 0.024 0.071 0.319 -0.007 -0.016 0.852
conscientiousness Frequency 0.024 0.071 0.320 -0.002 -0.004 0.958
neuroticism Goals -0.042 -0.127 0.062 -0.006 -0.014 0.861
neuroticism Frequency -0.042 -0.128 0.062 -0.067 -0.153 0.064
openness Goals 0.004 0.015 0.858 0.057 0.110 0.266
openness Frequency 0.003 0.013 0.876 0.035 0.100 0.296

No significant moderation effects at the domain level.

Results summary across the Big Five facets: trait-specific change goals (Goals) and frequency of self-improvement behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp6_ideal[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals -0.038 -0.163 0.163 0.008 0.035 0.755
sociability Frequency -0.036 -0.154 0.191 0.037 0.118 0.387
assertiveness Goals -0.035 -0.160 0.090 -0.025 -0.112 0.206
assertiveness Frequency -0.032 -0.156 0.093 -0.006 -0.023 0.840
energy Goals -0.016 -0.061 0.503 -0.052 -0.204 0.064
energy Frequency -0.015 -0.062 0.501 0.031 0.091 0.422
compassion Goals 0.016 0.033 0.708 0.023 0.050 0.618
compassion Frequency 0.015 0.032 0.719 0.076 0.119 0.269
respectfulness Goals 0.041 0.136 0.132 -0.016 -0.053 0.563
respectfulness Frequency 0.041 0.135 0.136 -0.019 -0.047 0.616
trust Goals 0.020 0.083 0.382 -0.038 -0.154 0.109
trust Frequency 0.020 0.081 0.398 0.001 0.002 0.983
organization Goals 0.042 0.125 0.192 -0.024 -0.070 0.451
organization Frequency 0.042 0.126 0.189 -0.018 -0.040 0.660
productiveness Goals 0.021 0.066 0.422 -0.026 -0.079 0.408
productiveness Frequency 0.021 0.066 0.422 0.012 0.028 0.769
responsibility Goals -0.018 -0.066 0.542 0.021 0.076 0.484
responsibility Frequency -0.019 -0.068 0.527 -0.006 -0.017 0.890
anxiety Goals -0.038 -0.168 0.079 -0.020 -0.088 0.290
anxiety Frequency -0.038 -0.168 0.081 -0.040 -0.130 0.267
depression Goals -0.026 -0.081 0.307 0.013 0.039 0.621
depression Frequency -0.027 -0.083 0.297 -0.028 -0.064 0.512
volatility Goals -0.008 -0.027 0.800 -0.024 -0.077 0.458
volatility Frequency -0.008 -0.027 0.804 -0.081 -0.199 0.088
curiosity Goals 0.002 0.132 0.916 0.019 1.087 0.500
curiosity Frequency 0.002 0.089 0.910 0.039 1.014 0.238
aesthetic Goals 0.007 0.096 0.311 -0.013 -0.162 0.206
aesthetic Frequency 0.008 0.105 0.293 -0.002 -0.022 0.817
imagination Goals 0.021 0.049 0.527 -0.044 -0.103 0.160
imagination Frequency 0.021 0.049 0.530 0.064 0.109 0.300

No significant moderation effects at the facet level (at p < .001).

Prepare data frame for plotting:

Show the code
df_table_hyp6_plot_ideal <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp6 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp6 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp6 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp6 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp6 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp6 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp6 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp6 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp6 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp6 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp6 %>% filter(term=="d_socia_1 ~ sb07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp6 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp6 %>% filter(term=="d_asser_1 ~ sb07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp6 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp6 %>% filter(term=="d_energ_1 ~ sb07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp6 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp6 %>% filter(term=="d_compa_1 ~ sb07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp6 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp6 %>% filter(term=="d_respe_1 ~ sb07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp6 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp6 %>% filter(term=="d_trust_1 ~ sb07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp6 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp6 %>% filter(term=="d_organ_1 ~ sb07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp6 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp6 %>% filter(term=="d_produ_1 ~ sb07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp6 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp6 %>% filter(term=="d_respo_1 ~ sb07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp6 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp6 %>% filter(term=="d_anxie_1 ~ sb07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp6 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp6 %>% filter(term=="d_depre_1 ~ sb07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp6 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp6 %>% filter(term=="d_volat_1 ~ sb07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp6 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp6 %>% filter(term=="d_curio_1 ~ sb07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp6 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp6 %>% filter(term=="d_aesth_1 ~ sb07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp6 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp6 %>% filter(term=="d_imagi_1 ~ sb07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp6 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp6_plot_ideal <- df_table_hyp6_plot_ideal %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Ideal", levels = c("Ideal"), labels = c("Ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses (only showing the moderation effects):

  • Ideal = ideal-level personality
  • Goals = specific, facet-level change goal(s) as moderator
  • Frequency = frequency of self-improvement behavior as moderator
Show the code
ggplot(df_table_hyp6_plot_ideal, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#A9A9A9", "#000000")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7 H7: Desire to change and frequency of self-acceptance behaviors as moderators of change in personality in self-acceptance group (H3 in paper)

Desire to change and frequency of self-acceptance behaviors measured at the follow-up assessment will be positively related to change in ideal personality ratings in the self-acceptance group.

To test this hypothesis, we will estimate the mean-level difference in ideal trait ratings between baseline and follow up using a latent change model for each big five domain and facet. We will then include two moderators. The first will indicate how much the individual wanted to accept themselves on a given big five domain or facet. The second will indicate their frequency of self-acceptance behaviors. We will estimate the main effects of each of these variables and the interaction between these variables on the trait change score.

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa_mod <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa07", # facet-specific acceptance goals
                                  "sa04"))) %>% # frequency self-acceptance behaviors
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa07", "sa04")))) %>% 
  select(-c(sa07_01_t2, sa07_02_t2, sa07_03_t2, sa07_04_t2, sa07_05_t2, 
            sa07_06_t2, sa07_07_t2, sa07_08_t2, sa07_09_t2, sa07_10_t2, 
            sa07_11_t2, sa07_12_t2, sa07_13_t2, sa07_14_t2, sa07_15_t2, 
            sa04_01_t1, sa04_02_t1, sa04_03_t1)) # frequency of self-acceptance behaviors measured at T2
# standardize goal variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa_wide_pers_sa_mod <- df_sbsa_wide_pers_sa_mod %>% 
  mutate_at(c(colnames(df_sbsa_wide_pers_sa_mod)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa_wide_pers_sa)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa_mod <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa_mod)

6.7.1 Big Five traits (run models)

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goals

trait_template_mod_goal_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

goals =~ 1*ind_goal_1 + ind_goal_2 + ind_goal_3 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ goals           # This estimates the moderation effect on personality at T1
d_trait_1 ~ goals          # This estimates the moderation effect on the change score

goals ~ 0*1            # This fixes the intercept of the moderator to 0
goals ~~ goals         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ind_goal_1 ~~ ind_goal_1
ind_goal_2 ~~ ind_goal_2
ind_goal_3 ~~ ind_goal_3

ind_goal_1 ~ 1
ind_goal_2 ~ 1
ind_goal_3 ~ 1
'

trait_facets_nrs <- list(a1 = c(1:3), b2 = c(4:6), c3 = c(7:9), d4 = c(10:12), e5 = c(13:15)) # matching facet nrs to traits 

# loop across 5 traits -> change in ideal personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  mod_names = paste0("sa07_", str_pad(trait_facets_nrs[[i]], 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(trait_template_mod_goal_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3"),
                                         "ind_goal_1" = mod_names[1], "ind_goal_2" = mod_names[2], "ind_goal_3" = mod_names[3]))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), trait_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

trait_template_mod_frequ_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for extra_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for extra_t2 with the equality constrained factor loadings

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
trait_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_trait_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 5 traits -> change in ideal personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), trait_model_fit))
}  

# loop across 5 traits -> change in current personality
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_mod_frequ_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), # current instead of ideal
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), trait_model_fit))
}  

6.7.2 Big Five traits (ideal personality)

6.7.2.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5935.149 6035.231 0.98 0.036 0.04
# parameters of interest
params_lcs_extra_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.070 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.903 NA NA
d_extra_1 ~1 -0.038 -0.097 0.021 -0.096 -1.262 0.207
extra_t1 ~1 3.713 3.652 3.775 7.934 118.215 0.000
d_extra_1 ~~ d_extra_1 0.154 0.084 0.225 0.990 4.293 0.000
extra_t1 ~~ d_extra_1 -0.091 -0.139 -0.043 -0.497 -3.731 0.000
extra_t1 ~ goals 0.018 -0.110 0.147 0.026 0.277 0.782
d_extra_1 ~ goals -0.059 -0.192 0.074 -0.100 -0.873 0.383
goals ~~ goals 0.442 0.236 0.648 1.000 4.209 0.000

The moderation effect of specific, facet-level acceptance goals with the extraversion change score (ideal personality) is not significantly different from zero, b = -0.059, p = 0.383.

6.7.2.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5693.992 5794.074 0.982 0.038 0.045
# parameters of interest
params_lcs_extra_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.074 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.902 NA NA
d_extra_1 ~1 -0.037 -0.094 0.021 -0.096 -1.255 0.210
extra_t1 ~1 3.713 3.652 3.774 8.114 118.929 0.000
d_extra_1 ~~ d_extra_1 0.148 0.081 0.214 0.999 4.358 0.000
extra_t1 ~~ d_extra_1 -0.088 -0.135 -0.042 -0.511 -3.700 0.000
extra_t1 ~ frequ 0.110 0.009 0.210 0.169 2.133 0.033
d_extra_1 ~ frequ 0.012 -0.078 0.102 0.023 0.269 0.788
frequ ~~ frequ 0.499 0.337 0.661 1.000 6.033 0.000

The moderation effect of the frequency of self-acceptance behaviors with the extraversion change score (ideal personality) is not significantly different from zero, b = 0.012, p = 0.788.

6.7.2.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5879.39 5979.472 0.99 0.033 0.041
# parameters of interest
params_lcs_agree_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.988 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.674 NA NA
d_agree_1 ~1 -0.012 -0.057 0.034 -0.037 -0.511 0.609
agree_t1 ~1 3.705 3.631 3.779 7.923 98.601 0.000
d_agree_1 ~~ d_agree_1 0.101 0.062 0.141 0.994 4.997 0.000
agree_t1 ~~ d_agree_1 -0.047 -0.077 -0.017 -0.318 -3.097 0.002
agree_t1 ~ goals -0.070 -0.214 0.073 -0.082 -0.957 0.339
d_agree_1 ~ goals 0.044 -0.082 0.170 0.076 0.688 0.491
goals ~~ goals 0.296 0.107 0.486 1.000 3.063 0.002

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (ideal personality) is not significantly different from zero, b = 0.044, p = 0.491.

6.7.2.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5683.413 5783.496 0.979 0.051 0.056
# parameters of interest
params_lcs_agree_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.989 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.676 NA NA
d_agree_1 ~1 -0.011 -0.056 0.034 -0.035 -0.486 0.627
agree_t1 ~1 3.705 3.631 3.778 8.075 98.699 0.000
d_agree_1 ~~ d_agree_1 0.098 0.059 0.136 0.993 4.929 0.000
agree_t1 ~~ d_agree_1 -0.051 -0.081 -0.021 -0.376 -3.308 0.001
agree_t1 ~ frequ 0.222 0.130 0.314 0.342 4.722 0.000
d_agree_1 ~ frequ 0.036 -0.033 0.105 0.082 1.029 0.304
frequ ~~ frequ 0.499 0.343 0.655 1.000 6.257 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (ideal personality) is not significantly different from zero, b = 0.036, p = 0.304.

6.7.2.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5323.8 5423.883 0.999 0.01 0.033
# parameters of interest
params_lcs_consc_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.045 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.738 NA NA
d_consc_1 ~1 0.017 -0.031 0.066 0.050 0.700 0.484
consc_t1 ~1 4.377 4.319 4.435 8.899 148.438 0.000
d_consc_1 ~~ d_consc_1 0.121 0.059 0.183 1.000 3.810 0.000
consc_t1 ~~ d_consc_1 -0.070 -0.134 -0.007 -0.418 -2.175 0.030
consc_t1 ~ goals -0.100 -0.182 -0.018 -0.151 -2.401 0.016
d_consc_1 ~ goals -0.001 -0.065 0.064 -0.001 -0.019 0.985
goals ~~ goals 0.550 0.416 0.685 1.000 8.025 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (ideal personality) is not significantly different from zero, b = -0.001, p = 0.985.

6.7.2.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5289.695 5389.778 0.988 0.036 0.04
# parameters of interest
params_lcs_consc_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.045 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.737 NA NA
d_consc_1 ~1 0.018 -0.031 0.067 0.051 0.713 0.476
consc_t1 ~1 4.377 4.319 4.435 8.851 148.369 0.000
d_consc_1 ~~ d_consc_1 0.121 0.059 0.183 0.998 3.842 0.000
consc_t1 ~~ d_consc_1 -0.074 -0.135 -0.012 -0.448 -2.333 0.020
consc_t1 ~ frequ 0.214 0.120 0.308 0.301 4.476 0.000
d_consc_1 ~ frequ 0.024 -0.056 0.104 0.048 0.586 0.558
frequ ~~ frequ 0.485 0.328 0.642 1.000 6.054 0.000

The moderation effect of the frequency of self-acceptance behaviors with the conscientiousness change score (ideal personality) is not significantly different from zero, b = 0.024, p = 0.558.

6.7.2.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5546.955 5647.038 0.971 0.049 0.049
# parameters of interest
params_lcs_neuro_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.938 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.780 NA NA
d_neuro_1 ~1 0.011 -0.037 0.059 0.034 0.445 0.656
neuro_t1 ~1 1.646 1.595 1.697 4.228 63.227 0.000
d_neuro_1 ~~ d_neuro_1 0.103 0.054 0.151 0.981 4.166 0.000
neuro_t1 ~~ d_neuro_1 -0.042 -0.070 -0.014 -0.338 -2.930 0.003
neuro_t1 ~ goals 0.005 -0.081 0.091 0.006 0.105 0.917
d_neuro_1 ~ goals 0.081 -0.027 0.188 0.136 1.462 0.144
goals ~~ goals 0.300 0.083 0.518 1.000 2.713 0.007

The moderation effect of specific, facet-level acceptance goals with the neuroticism change score (ideal personality) is not significantly different from zero, b = 0.081, p = 0.144.

6.7.2.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5397.028 5497.111 0.986 0.035 0.045
# parameters of interest
params_lcs_neuro_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.937 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.781 NA NA
d_neuro_1 ~1 0.011 -0.038 0.059 0.032 0.427 0.669
neuro_t1 ~1 1.646 1.595 1.697 4.183 63.132 0.000
d_neuro_1 ~~ d_neuro_1 0.107 0.056 0.158 0.999 4.123 0.000
neuro_t1 ~~ d_neuro_1 -0.044 -0.073 -0.015 -0.346 -2.938 0.003
neuro_t1 ~ frequ -0.099 -0.182 -0.016 -0.178 -2.341 0.019
d_neuro_1 ~ frequ -0.018 -0.093 0.057 -0.038 -0.465 0.642
frequ ~~ frequ 0.500 0.336 0.664 1.000 5.969 0.000

The moderation effect of the frequency of self-acceptance behaviors with the neuroticism change score (ideal personality) is not significantly different from zero, b = -0.018, p = 0.642.

6.7.2.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5717.273 5817.356 0.99 0.033 0.033
# parameters of interest
params_lcs_openn_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.966 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.638 NA NA
d_openn_1 ~1 -0.013 -0.053 0.026 -0.057 -0.665 0.506
openn_t1 ~1 3.811 3.752 3.870 10.652 126.434 0.000
d_openn_1 ~~ d_openn_1 0.056 0.028 0.083 0.996 3.978 0.000
openn_t1 ~~ d_openn_1 -0.023 -0.039 -0.006 -0.271 -2.704 0.007
openn_t1 ~ goals -0.095 -0.186 -0.005 -0.148 -2.072 0.038
d_openn_1 ~ goals 0.026 -0.049 0.102 0.061 0.676 0.499
goals ~~ goals 0.308 0.187 0.430 1.000 4.977 0.000

The moderation effect of specific, facet-level acceptance goals with the openness change score (ideal personality) is not significantly different from zero, b = 0.026, p = 0.499.

6.7.2.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5700.132 5800.214 0.99 0.03 0.037
# parameters of interest
params_lcs_openn_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.966 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.639 NA NA
d_openn_1 ~1 -0.013 -0.053 0.027 -0.056 -0.650 0.515
openn_t1 ~1 3.811 3.752 3.870 10.633 126.454 0.000
d_openn_1 ~~ d_openn_1 0.056 0.029 0.083 0.996 4.015 0.000
openn_t1 ~~ d_openn_1 -0.024 -0.041 -0.008 -0.294 -2.913 0.004
openn_t1 ~ frequ 0.091 0.018 0.164 0.181 2.456 0.014
d_openn_1 ~ frequ 0.022 -0.040 0.083 0.065 0.686 0.493
frequ ~~ frequ 0.504 0.343 0.666 1.000 6.128 0.000

The moderation effect of frequency of self-acceptance behaviors with the openness change score (ideal personality) is not significantly different from zero, b = 0.022, p = 0.493.

6.7.3 Big Five traits (current personality)

6.7.3.1 Extraversion: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6391.242 6491.324 0.981 0.055 0.035
# parameters of interest
params_lcs_extra_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ goals", "goals ~~ goals", "extra_t1 ~ goals", # acceptance goals
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.042 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.562 NA NA
d_extra_1 ~1 0.168 0.113 0.224 0.455 5.968 0.00
extra_t1 ~1 2.761 2.678 2.843 4.025 65.807 0.00
d_extra_1 ~~ d_extra_1 0.119 0.072 0.166 0.871 4.952 0.00
extra_t1 ~~ d_extra_1 -0.020 -0.059 0.019 -0.126 -1.015 0.31
extra_t1 ~ goals -0.762 -0.971 -0.554 -0.731 -7.173 0.00
d_extra_1 ~ goals 0.202 0.093 0.311 0.360 3.635 0.00
goals ~~ goals 0.433 0.283 0.583 1.000 5.649 0.00

Specific, facet-level acceptance goals significantly moderated changes in extraversion (current personality), b = 0.202, p = 0.

6.7.3.2 Extraversion: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6238.901 6338.984 0.971 0.068 0.052
# parameters of interest
params_lcs_extra_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_extra_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ frequ", "frequ ~~ frequ", "extra_t1 ~ frequ", # frequency of self improvement
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.045 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.564 NA NA
d_extra_1 ~1 0.166 0.112 0.221 0.452 5.964 0.000
extra_t1 ~1 2.762 2.679 2.844 4.053 65.689 0.000
d_extra_1 ~~ d_extra_1 0.116 0.067 0.165 0.862 4.657 0.000
extra_t1 ~~ d_extra_1 -0.095 -0.138 -0.052 -0.410 -4.304 0.000
extra_t1 ~ frequ 0.083 -0.070 0.236 0.082 1.060 0.289
d_extra_1 ~ frequ 0.203 0.102 0.304 0.372 3.930 0.000
frequ ~~ frequ 0.453 0.292 0.614 1.000 5.521 0.000

The frequency of self-acceptance behaviors significantly moderated changes in extraversion (current personality), b = 0.203, p = 0.

6.7.3.3 Agreeableness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5841.514 5941.596 0.978 0.048 0.042
# parameters of interest
params_lcs_agree_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ goals", "goals ~~ goals", "agree_t1 ~ goals", # acceptance goals
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.023 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.546 NA NA
d_agree_1 ~1 0.042 0.007 0.077 0.200 2.357 0.018
agree_t1 ~1 3.331 3.267 3.396 8.419 101.105 0.000
d_agree_1 ~~ d_agree_1 0.043 0.009 0.076 0.960 2.488 0.013
agree_t1 ~~ d_agree_1 -0.020 -0.046 0.006 -0.260 -1.483 0.138
agree_t1 ~ goals -0.243 -0.361 -0.125 -0.345 -4.041 0.000
d_agree_1 ~ goals 0.075 -0.008 0.159 0.200 1.766 0.077
goals ~~ goals 0.314 0.165 0.464 1.000 4.117 0.000

The moderation effect of specific, facet-level acceptance goals with the agreeableness change score (current personality) is not significantly different from zero, b = 0.075, p = 0.077.

6.7.3.4 Agreeableness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5649.413 5749.495 0.979 0.049 0.039
# parameters of interest
params_lcs_agree_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_agree_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ frequ", "frequ ~~ frequ", "agree_t1 ~ frequ", # frequency of self improvement
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.019 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.043 0.007 0.079 0.201 2.343 0.019
agree_t1 ~1 3.331 3.266 3.395 8.299 101.112 0.000
d_agree_1 ~~ d_agree_1 0.044 0.008 0.080 0.969 2.393 0.017
agree_t1 ~~ d_agree_1 -0.032 -0.061 -0.003 -0.417 -2.141 0.032
agree_t1 ~ frequ 0.252 0.158 0.345 0.416 5.270 0.000
d_agree_1 ~ frequ 0.057 -0.008 0.121 0.176 1.714 0.087
frequ ~~ frequ 0.439 0.290 0.589 1.000 5.760 0.000

The moderation effect of the frequency of self-acceptance behaviors with the agreeableness change score (current personality) is not significantly different from zero, b = 0.057, p = 0.087.

6.7.3.5 Conscientiousness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5826.273 5926.355 0.984 0.062 0.026
# parameters of interest
params_lcs_consc_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ goals", "goals ~~ goals", "consc_t1 ~ goals", # acceptance goals
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.009 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.476 NA NA
d_consc_1 ~1 0.153 0.105 0.202 0.432 6.184 0.000
consc_t1 ~1 3.503 3.415 3.591 4.655 77.942 0.000
d_consc_1 ~~ d_consc_1 0.125 0.075 0.175 0.992 4.893 0.000
consc_t1 ~~ d_consc_1 -0.051 -0.091 -0.011 -0.282 -2.522 0.012
consc_t1 ~ goals -0.707 -0.818 -0.596 -0.734 -12.457 0.000
d_consc_1 ~ goals 0.040 -0.029 0.108 0.087 1.133 0.257
goals ~~ goals 0.610 0.484 0.735 1.000 9.532 0.000

The moderation effect of specific, facet-level acceptance goals with the conscientiousness change score (current personality) is not significantly different from zero, b = 0.04, p = 0.257.

6.7.3.6 Conscientiousness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5963.555 6063.637 0.981 0.063 0.052
# parameters of interest
params_lcs_consc_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_consc_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ frequ", "frequ ~~ frequ", "consc_t1 ~ frequ", # frequency of self improvement
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.009 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.476 NA NA
d_consc_1 ~1 0.153 0.105 0.201 0.436 6.252 0.000
consc_t1 ~1 3.504 3.416 3.592 4.721 77.967 0.000
d_consc_1 ~~ d_consc_1 0.114 0.067 0.160 0.926 4.737 0.000
consc_t1 ~~ d_consc_1 -0.079 -0.124 -0.034 -0.322 -3.469 0.001
consc_t1 ~ frequ 0.207 0.011 0.403 0.181 2.071 0.038
d_consc_1 ~ frequ 0.147 0.053 0.240 0.272 3.084 0.002
frequ ~~ frequ 0.422 0.250 0.594 1.000 4.806 0.000

The frequency of self-acceptance behaviors significantly moderates changes in conscientiousness (current personality), b = 0.147, p = 0.002.

6.7.3.7 Neuroticism: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6480.009 6580.091 0.99 0.044 0.029
# parameters of interest
params_lcs_neuro_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ goals", "goals ~~ goals", "neuro_t1 ~ goals", # acceptance goals
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.993 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.580 NA NA
d_neuro_1 ~1 -0.183 -0.241 -0.124 -0.408 -6.143 0.000
neuro_t1 ~1 3.519 3.426 3.612 4.598 74.411 0.000
d_neuro_1 ~~ d_neuro_1 0.194 0.133 0.254 0.968 6.223 0.000
neuro_t1 ~~ d_neuro_1 -0.067 -0.120 -0.014 -0.226 -2.491 0.013
neuro_t1 ~ goals 0.540 0.373 0.707 0.474 6.327 0.000
d_neuro_1 ~ goals -0.119 -0.229 -0.010 -0.180 -2.143 0.032
goals ~~ goals 0.452 0.299 0.606 1.000 5.776 0.000

Specific, facet-level acceptance goals significantly moderated changes in neuroticism (current personality), b = -0.119, p = 0.032.

6.7.3.8 Neuroticism: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 6371.078 6471.161 0.987 0.049 0.05
# parameters of interest
params_lcs_neuro_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_neuro_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ frequ", "frequ ~~ frequ", "neuro_t1 ~ frequ", # frequency of self improvement
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.993 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.580 NA NA
d_neuro_1 ~1 -0.182 -0.240 -0.124 -0.409 -6.160 0.000
neuro_t1 ~1 3.518 3.426 3.611 4.620 74.398 0.000
d_neuro_1 ~~ d_neuro_1 0.173 0.114 0.231 0.876 5.787 0.000
neuro_t1 ~~ d_neuro_1 -0.083 -0.135 -0.031 -0.264 -3.123 0.002
neuro_t1 ~ frequ 0.106 -0.058 0.269 0.098 1.263 0.207
d_neuro_1 ~ frequ -0.222 -0.328 -0.115 -0.352 -4.089 0.000
frequ ~~ frequ 0.499 0.332 0.666 1.000 5.868 0.000

The frequency of self-acceptance behaviors significantly moderates changes in neuroticism (current personality), b = -0.222, p = 0.

6.7.3.9 Openness: specific, facet-level acceptance goals as moderator of change

Results summary (goals = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5933.787 6033.869 1 0.002 0.033
# parameters of interest
params_lcs_openn_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ goals", "goals ~~ goals", "openn_t1 ~ goals", # acceptance goals
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.054 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.595 NA NA
d_openn_1 ~1 0.076 0.031 0.121 0.249 3.317 0.001
openn_t1 ~1 3.473 3.399 3.548 6.396 91.010 0.000
d_openn_1 ~~ d_openn_1 0.091 0.054 0.128 0.971 4.843 0.000
openn_t1 ~~ d_openn_1 -0.048 -0.077 -0.020 -0.334 -3.366 0.001
openn_t1 ~ goals -0.449 -0.601 -0.297 -0.467 -5.787 0.000
d_openn_1 ~ goals 0.092 0.003 0.181 0.170 2.035 0.042
goals ~~ goals 0.319 0.198 0.441 1.000 5.159 0.000

Specific, facet-level acceptance goals significantly moderated changes in openness (current personality), b = 0.092, p = 0.042.

6.7.3.10 Openness: frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self improvement behavior):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 26 5950.726 6050.809 0.997 0.021 0.026
# parameters of interest
params_lcs_openn_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_openn_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ frequ", "frequ ~~ frequ", "openn_t1 ~ frequ", # frequency of self improvement
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 1.055 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.594 NA NA
d_openn_1 ~1 0.074 0.030 0.119 0.246 3.269 0.001
openn_t1 ~1 3.474 3.399 3.549 6.488 90.929 0.000
d_openn_1 ~~ d_openn_1 0.081 0.047 0.115 0.893 4.695 0.000
openn_t1 ~~ d_openn_1 -0.065 -0.095 -0.035 -0.429 -4.232 0.000
openn_t1 ~ frequ 0.075 -0.027 0.176 0.098 1.447 0.148
d_openn_1 ~ frequ 0.141 0.069 0.213 0.327 3.823 0.000
frequ ~~ frequ 0.492 0.336 0.649 1.000 6.154 0.000

The frequency of self-acceptance behaviors significantly moderates changes in openness (current personality), b = 0.141, p = 0.

6.7.4 Big Five facets (run models)

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_mod_goal_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ ind_goal        # This estimates the moderation effect on personality at T1
d_facet_1 ~ ind_goal       # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ind_goal ~~ ind_goal
ind_goal ~ 1
'

# loop across 15 facets -> changes in ideal personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_specif_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  mod_name = paste0("sa07_", str_pad(i-5, 2, pad = "0"), "_t1")
  template_filled <- str_replace_all(facet_template_mod_goal_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4],
                                         "ind_goal" = mod_name))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_specif_hyp7")), facet_model_fit))
}  

# 2nd, for frequency of self-acceptance behavior

facet_template_mod_frequ_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

frequ =~ 1*sa04_01_t2 + sa04_02_t2 + sa04_03_t2 # latent variable for moderator

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional
facet_t1 ~ frequ           # This estimates the moderation effect on personality at T1
d_facet_1 ~ frequ          # This estimates the moderation effect on the change score

frequ ~ 0*1          # This fixes the intercept of the moderator to 0
frequ ~~ frequ         # This estimates the variance of the moderator

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

sa04_01_t2 ~~ sa04_01_t2
sa04_02_t2 ~~ sa04_02_t2
sa04_03_t2 ~~ sa04_03_t2

sa04_01_t2 ~ 1
sa04_02_t2 ~ 1
sa04_03_t2 ~ 1
'

# loop across 15 facets -> changes in ideal personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_frequ_hyp7")), facet_model_fit))
}  

# loop across 15 facets -> changes in current personality
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal
  items = paste0(bfi_versions[[5]], item_nrs) # current instead of ideal!
  template_filled <- str_replace_all(facet_template_mod_frequ_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_mod, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), template_filled)) # current instead of ideal!
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_frequ_hyp7")), facet_model_fit))
}  

6.7.5 Big Five facets (ideal personality)

6.7.5.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8107.918 8196.453 0.956 0.047 0.048
# parameters of interest
params_lcs_socia_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.048 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.744 NA NA
d_socia_1 ~1 -0.058 -0.107 -0.009 -0.228 -2.333 0.020
socia_t1 ~1 4.321 4.250 4.393 12.029 118.254 0.000
d_socia_1 ~~ d_socia_1 0.064 0.018 0.111 0.992 2.706 0.007
socia_t1 ~~ d_socia_1 -0.037 -0.062 -0.013 -0.412 -2.955 0.003
d_socia_1 ~ sa07_01_t1 -0.023 -0.076 0.031 -0.090 -0.839 0.401
sa07_01_t1 ~~ sa07_01_t1 0.997 0.896 1.099 1.000 19.272 0.000

The moderation effect of the facet-specific acceptance goal with the sociability change score (ideal personality) is not significantly different from zero, b = -0.023, p = 0.401.

6.7.5.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9702.66 9818.139 0.973 0.035 0.049
# parameters of interest
params_lcs_socia_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.050 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.748 NA NA
d_socia_1 ~1 -0.058 -0.106 -0.009 -0.229 -2.327 0.020
socia_t1 ~1 4.321 4.249 4.392 12.216 118.396 0.000
d_socia_1 ~~ d_socia_1 0.063 0.017 0.109 0.993 2.666 0.008
socia_t1 ~~ d_socia_1 -0.038 -0.063 -0.012 -0.424 -2.922 0.003
socia_t1 ~ frequ -0.007 -0.094 0.079 -0.015 -0.168 0.866
d_socia_1 ~ frequ -0.030 -0.107 0.047 -0.084 -0.767 0.443
frequ ~~ frequ 0.494 0.335 0.652 1.000 6.089 0.000

The moderation effect of the frequency of self-acceptance behaviors with sociability change score (ideal personality) is not significantly different from zero, b = -0.03, p = 0.443.

6.7.5.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8366.803 8455.338 0.998 0.01 0.034
# parameters of interest
params_lcs_asser_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.010 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.748 NA NA
d_asser_1 ~1 -0.034 -0.071 0.003 -0.167 -1.782 0.075
asser_t1 ~1 4.163 4.072 4.253 15.130 90.200 0.000
d_asser_1 ~~ d_asser_1 0.041 0.004 0.078 0.983 2.151 0.031
asser_t1 ~~ d_asser_1 -0.021 -0.043 0.002 -0.376 -1.828 0.068
d_asser_1 ~ sa07_02_t1 -0.027 -0.065 0.011 -0.132 -1.398 0.162
sa07_02_t1 ~~ sa07_02_t1 0.997 0.899 1.095 1.000 19.966 0.000

The moderation effect of the facet-specific acceptance goal with the assertiveness change score (ideal personality) is not significantly different from zero, b = -0.027, p = 0.162.

6.7.5.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9943.262 10058.74 0.994 0.015 0.035
# parameters of interest
params_lcs_asser_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.008 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.742 NA NA
d_asser_1 ~1 -0.033 -0.071 0.004 -0.164 -1.744 0.081
asser_t1 ~1 4.163 4.072 4.253 15.106 89.805 0.000
d_asser_1 ~~ d_asser_1 0.040 0.004 0.076 0.969 2.164 0.030
asser_t1 ~~ d_asser_1 -0.023 -0.047 0.000 -0.435 -1.941 0.052
asser_t1 ~ frequ 0.088 0.008 0.167 0.221 2.163 0.031
d_asser_1 ~ frequ 0.051 -0.008 0.110 0.175 1.695 0.090
frequ ~~ frequ 0.482 0.324 0.641 1.000 5.973 0.000

The moderation effect of the frequency of self-acceptance behaviors on the assertiveness change score (ideal personality) is not significantly different from zero, b = 0.051, p = 0.09.

6.7.5.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7723.141 7811.676 0.912 0.05 0.06
# parameters of interest
params_lcs_energ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.105 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.930 NA NA
d_energ_1 ~1 0.011 -0.033 0.056 0.049 0.503 0.615
energ_t1 ~1 3.608 3.492 3.724 12.827 60.954 0.000
d_energ_1 ~~ d_energ_1 0.054 -0.030 0.138 0.956 1.251 0.211
energ_t1 ~~ d_energ_1 -0.033 -0.093 0.026 -0.517 -1.096 0.273
d_energ_1 ~ sa07_03_t1 -0.050 -0.110 0.011 -0.209 -1.599 0.110
sa07_03_t1 ~~ sa07_03_t1 0.997 0.900 1.093 1.000 20.241 0.000

The moderation effect of the facet-specific acceptance goal with the energy change score (ideal personality) is not significantly different from zero, b = -0.05, p = 0.11.

6.7.5.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9295.719 9411.199 0.94 0.046 0.057
# parameters of interest
params_lcs_energ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.081 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.911 NA NA
d_energ_1 ~1 0.011 -0.033 0.054 0.047 0.476 0.634
energ_t1 ~1 3.609 3.493 3.725 13.377 60.966 0.000
d_energ_1 ~~ d_energ_1 0.052 -0.028 0.131 1.000 1.273 0.203
energ_t1 ~~ d_energ_1 -0.031 -0.088 0.025 -0.540 -1.078 0.281
energ_t1 ~ frequ 0.130 0.044 0.216 0.338 2.964 0.003
d_energ_1 ~ frequ 0.001 -0.059 0.062 0.004 0.040 0.968
frequ ~~ frequ 0.494 0.339 0.650 1.000 6.231 0.000

The moderation effect of the frequency of self-acceptance behaviors with the energy change score (ideal personality) is not significantly different from zero, b = 0.001, p = 0.968.

6.7.5.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8749.71 8838.245 1 0 0.032
# parameters of interest
params_lcs_compa_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.019 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.592 NA NA
d_compa_1 ~1 -0.039 -0.110 0.031 -0.117 -1.089 0.276
compa_t1 ~1 4.255 4.163 4.347 7.386 90.697 0.000
d_compa_1 ~~ d_compa_1 0.108 0.003 0.212 0.962 2.025 0.043
compa_t1 ~~ d_compa_1 -0.063 -0.133 0.008 -0.331 -1.734 0.083
d_compa_1 ~ sa07_04_t1 -0.065 -0.138 0.008 -0.194 -1.757 0.079
sa07_04_t1 ~~ sa07_04_t1 0.997 0.891 1.103 1.000 18.458 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (ideal personality) is not significantly different from zero, b = -0.065, p = 0.079.

6.7.5.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10326.1 10441.58 0.975 0.032 0.052
# parameters of interest
params_lcs_compa_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.013 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.587 NA NA
d_compa_1 ~1 -0.041 -0.113 0.032 -0.119 -1.101 0.271
compa_t1 ~1 4.255 4.163 4.348 7.223 90.296 0.000
d_compa_1 ~~ d_compa_1 0.113 0.004 0.222 0.970 2.028 0.043
compa_t1 ~~ d_compa_1 -0.050 -0.118 0.018 -0.270 -1.430 0.153
compa_t1 ~ frequ 0.314 0.156 0.471 0.374 3.899 0.000
d_compa_1 ~ frequ -0.084 -0.227 0.058 -0.174 -1.164 0.244
frequ ~~ frequ 0.495 0.336 0.655 1.000 6.081 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (ideal personality) is not significantly different from zero, b = -0.084, p = 0.244.

6.7.5.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7025.553 7114.087 0.934 0.058 0.057
# parameters of interest
params_lcs_respe_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.954 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.663 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.309 0.757
respe_t1 ~1 4.672 4.614 4.730 13.678 156.724 0.000
d_respe_1 ~~ d_respe_1 0.056 0.014 0.099 0.996 2.594 0.009
respe_t1 ~~ d_respe_1 -0.022 -0.054 0.011 -0.271 -1.318 0.187
d_respe_1 ~ sa07_05_t1 0.015 -0.035 0.064 0.061 0.580 0.562
sa07_05_t1 ~~ sa07_05_t1 0.997 0.833 1.161 1.000 11.922 0.000

The moderation effect of the facet-specific acceptance goal with the respectfulness change score (ideal personality) is not significantly different from zero, b = 0.015, p = 0.562.

6.7.5.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8586.96 8702.44 0.963 0.043 0.049
# parameters of interest
params_lcs_respe_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.951 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.662 NA NA
d_respe_1 ~1 0.007 -0.038 0.052 0.030 0.313 0.754
respe_t1 ~1 4.672 4.613 4.731 13.620 156.370 0.000
d_respe_1 ~~ d_respe_1 0.055 0.013 0.098 0.973 2.534 0.011
respe_t1 ~~ d_respe_1 -0.027 -0.060 0.006 -0.357 -1.617 0.106
respe_t1 ~ frequ 0.172 0.097 0.248 0.350 4.482 0.000
d_respe_1 ~ frequ 0.057 -0.011 0.124 0.165 1.639 0.101
frequ ~~ frequ 0.485 0.332 0.637 1.000 6.221 0.000

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (ideal personality) is not significantly different from zero, b = 0.057, p = 0.101.

6.7.5.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8354.957 8443.491 0.958 0.046 0.042
# parameters of interest
params_lcs_trust_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.980 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.642 NA NA
d_trust_1 ~1 -0.030 -0.084 0.024 -0.106 -1.088 0.277
trust_t1 ~1 4.095 4.001 4.189 9.499 85.439 0.000
d_trust_1 ~~ d_trust_1 0.079 0.028 0.130 0.995 3.056 0.002
trust_t1 ~~ d_trust_1 -0.035 -0.071 0.001 -0.293 -1.930 0.054
d_trust_1 ~ sa07_06_t1 -0.020 -0.077 0.036 -0.072 -0.711 0.477
sa07_06_t1 ~~ sa07_06_t1 0.997 0.901 1.093 1.000 20.380 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (ideal personality) is not significantly different from zero, b = -0.02, p = 0.477.

6.7.5.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9932.026 10047.51 0.925 0.062 0.06
# parameters of interest
params_lcs_trust_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.989 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.643 NA NA
d_trust_1 ~1 -0.029 -0.085 0.027 -0.100 -1.019 0.308
trust_t1 ~1 4.095 4.000 4.189 9.152 85.017 0.000
d_trust_1 ~~ d_trust_1 0.084 0.032 0.136 0.992 3.147 0.002
trust_t1 ~~ d_trust_1 -0.043 -0.082 -0.005 -0.345 -2.194 0.028
trust_t1 ~ frequ 0.165 0.046 0.285 0.262 2.712 0.007
d_trust_1 ~ frequ 0.037 -0.057 0.131 0.090 0.776 0.438
frequ ~~ frequ 0.501 0.340 0.662 1.000 6.086 0.000

The moderation effect of the frequency of self-acceptance behaviors with the trust change score (ideal personality) is not significantly different from zero, b = 0.037, p = 0.438.

6.7.5.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7223.258 7311.792 0.941 0.049 0.049
# parameters of interest
params_lcs_organ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.037 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.825 NA NA
d_organ_1 ~1 -0.001 -0.034 0.032 -0.005 -0.056 0.955
organ_t1 ~1 4.304 4.215 4.393 16.217 95.276 0.000
d_organ_1 ~~ d_organ_1 0.044 0.003 0.085 0.996 2.119 0.034
organ_t1 ~~ d_organ_1 -0.024 -0.045 -0.003 -0.439 -2.218 0.027
d_organ_1 ~ sa07_07_t1 0.013 -0.023 0.048 0.060 0.704 0.482
sa07_07_t1 ~~ sa07_07_t1 0.997 0.919 1.076 1.000 24.892 0.000

The moderation effect of the facet-specific acceptance goal with the organization change score (ideal personality) is not significantly different from zero, b = 0.013, p = 0.482.

6.7.5.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8788.097 8903.577 0.971 0.035 0.044
# parameters of interest
params_lcs_organ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.035 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.831 NA NA
d_organ_1 ~1 -0.001 -0.032 0.030 -0.005 -0.061 0.951
organ_t1 ~1 4.304 4.215 4.393 17.594 94.883 0.000
d_organ_1 ~~ d_organ_1 0.038 0.002 0.074 0.977 2.062 0.039
organ_t1 ~~ d_organ_1 -0.024 -0.045 -0.002 -0.521 -2.186 0.029
organ_t1 ~ frequ 0.110 0.043 0.176 0.308 3.210 0.001
d_organ_1 ~ frequ 0.043 -0.012 0.098 0.151 1.537 0.124
frequ ~~ frequ 0.475 0.322 0.628 1.000 6.089 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (ideal personality) is not significantly different from zero, b = 0.043, p = 0.124.

6.7.5.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6732.154 6820.688 0.879 0.068 0.065
# parameters of interest
params_lcs_produ_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.085 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.742 NA NA
d_produ_1 ~1 0.026 -0.025 0.078 0.097 0.998 0.318
produ_t1 ~1 4.388 4.311 4.464 11.083 112.441 0.000
d_produ_1 ~~ d_produ_1 0.073 0.012 0.134 1.000 2.360 0.018
produ_t1 ~~ d_produ_1 -0.048 -0.098 0.001 -0.451 -1.907 0.057
d_produ_1 ~ sa07_08_t1 0.003 -0.041 0.047 0.012 0.150 0.881
sa07_08_t1 ~~ sa07_08_t1 0.997 0.905 1.089 1.000 21.144 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (ideal personality) is not significantly different from zero, b = 0.003, p = 0.881.

6.7.5.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8309.664 8425.144 0.944 0.047 0.057
# parameters of interest
params_lcs_produ_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.080 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.739 NA NA
d_produ_1 ~1 0.026 -0.025 0.077 0.097 0.998 0.318
produ_t1 ~1 4.388 4.311 4.464 11.150 112.449 0.000
d_produ_1 ~~ d_produ_1 0.071 0.012 0.129 0.972 2.348 0.019
produ_t1 ~~ d_produ_1 -0.050 -0.100 -0.001 -0.491 -2.005 0.045
produ_t1 ~ frequ 0.099 0.020 0.177 0.176 2.456 0.014
d_produ_1 ~ frequ 0.064 -0.019 0.147 0.167 1.510 0.131
frequ ~~ frequ 0.496 0.335 0.657 1.000 6.037 0.000

The moderation effect of the frequency of self-acceptance behaviors with the productiveness change score (ideal personality) is not significantly different from zero, b = 0.064, p = 0.131.

6.7.5.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7699.576 7788.11 0.982 0.028 0.043
# parameters of interest
params_lcs_respo_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.053 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.787 NA NA
d_respo_1 ~1 0.030 -0.034 0.094 0.080 0.919 0.358
respo_t1 ~1 4.275 4.175 4.375 8.516 83.520 0.000
d_respo_1 ~~ d_respo_1 0.141 0.032 0.249 1.000 2.547 0.011
respo_t1 ~~ d_respo_1 -0.083 -0.154 -0.012 -0.443 -2.303 0.021
d_respo_1 ~ sa07_09_t1 -0.008 -0.074 0.058 -0.021 -0.240 0.811
sa07_09_t1 ~~ sa07_09_t1 0.997 0.907 1.088 1.000 21.609 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (ideal personality) is not significantly different from zero, b = -0.008, p = 0.811.

6.7.5.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9278.575 9394.055 0.976 0.033 0.046
# parameters of interest
params_lcs_respo_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.051 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.789 NA NA
d_respo_1 ~1 0.030 -0.034 0.095 0.080 0.920 0.358
respo_t1 ~1 4.275 4.175 4.375 8.510 83.578 0.000
d_respo_1 ~~ d_respo_1 0.142 0.036 0.248 1.000 2.616 0.009
respo_t1 ~~ d_respo_1 -0.083 -0.153 -0.014 -0.460 -2.340 0.019
respo_t1 ~ frequ 0.206 0.084 0.327 0.287 3.317 0.001
d_respo_1 ~ frequ 0.005 -0.097 0.106 0.009 0.090 0.929
frequ ~~ frequ 0.492 0.330 0.653 1.000 5.980 0.000

The moderation effect of the frequency of self-acceptance behaviors with the responsibility change score (ideal personality) is not significantly different from zero, b = 0.005, p = 0.929.

6.7.5.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8312.091 8400.626 0.9 0.046 0.047
# parameters of interest
params_lcs_anxie_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.859 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.766 NA NA
d_anxie_1 ~1 0.046 -0.010 0.102 0.180 1.601 0.109
anxie_t1 ~1 1.432 1.368 1.497 5.002 43.749 0.000
d_anxie_1 ~~ d_anxie_1 0.065 -0.029 0.160 1.000 1.352 0.176
anxie_t1 ~~ d_anxie_1 -0.018 -0.057 0.021 -0.247 -0.894 0.372
d_anxie_1 ~ sa07_10_t1 -0.001 -0.066 0.064 -0.006 -0.043 0.966
sa07_10_t1 ~~ sa07_10_t1 0.997 0.909 1.085 1.000 22.295 0.000

The moderation effect of the facet-specific acceptance goal with the anxiety change score (ideal personality) is not significantly different from zero, b = -0.001, p = 0.966.

6.7.5.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9895.846 10011.33 0.921 0.048 0.056
# parameters of interest
params_lcs_anxie_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.875 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.737 NA NA
d_anxie_1 ~1 0.047 -0.011 0.105 0.193 1.601 0.109
anxie_t1 ~1 1.432 1.367 1.497 4.922 43.419 0.000
d_anxie_1 ~~ d_anxie_1 0.060 -0.037 0.157 0.997 1.205 0.228
anxie_t1 ~~ d_anxie_1 -0.016 -0.053 0.021 -0.234 -0.833 0.405
anxie_t1 ~ frequ -0.125 -0.218 -0.032 -0.304 -2.631 0.009
d_anxie_1 ~ frequ 0.019 -0.077 0.115 0.055 0.387 0.699
frequ ~~ frequ 0.501 0.338 0.664 1.000 6.030 0.000

The moderation effect of the frequency of self-acceptance behaviors with the anxiety change score (ideal personality) is not significantly different from zero, b = 0.019, p = 0.699.

6.7.5.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6761.164 6849.698 0.83 0.082 0.072
# parameters of interest
params_lcs_depre_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.811 NA NA
d_depre_1 ~1 -0.018 -0.054 0.018 -0.081 -0.966 0.334
depre_t1 ~1 1.590 1.526 1.655 5.463 48.153 0.000
d_depre_1 ~~ d_depre_1 0.049 0.003 0.095 0.993 2.107 0.035
depre_t1 ~~ d_depre_1 -0.029 -0.057 0.000 -0.451 -1.980 0.048
d_depre_1 ~ sa07_11_t1 -0.019 -0.059 0.021 -0.086 -0.935 0.350
sa07_11_t1 ~~ sa07_11_t1 0.997 0.915 1.079 1.000 23.940 0.000

The moderation effect of the facet-specific acceptance goal with the depression change score (ideal personality) is not significantly different from zero, b = -0.019, p = 0.35.

6.7.5.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 8354.924 8470.404 0.878 0.071 0.069
# parameters of interest
params_lcs_depre_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.062 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.811 NA NA
d_depre_1 ~1 -0.018 -0.055 0.018 -0.082 -0.978 0.328
depre_t1 ~1 1.591 1.526 1.655 5.377 48.159 0.000
d_depre_1 ~~ d_depre_1 0.051 0.003 0.098 0.993 2.090 0.037
depre_t1 ~~ d_depre_1 -0.031 -0.061 -0.001 -0.464 -2.028 0.043
depre_t1 ~ frequ -0.028 -0.094 0.038 -0.067 -0.825 0.409
d_depre_1 ~ frequ -0.026 -0.088 0.035 -0.082 -0.838 0.402
frequ ~~ frequ 0.500 0.336 0.664 1.000 5.984 0.000

The moderation effect of the frequency of self-acceptance behaviors with the depression change score (ideal personality) is not significantly different from zero, b = -0.026, p = 0.402.

6.7.5.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7816.448 7904.982 0.953 0.039 0.046
# parameters of interest
params_lcs_volat_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.911 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.668 NA NA
d_volat_1 ~1 0.022 -0.040 0.084 0.071 0.707 0.479
volat_t1 ~1 1.703 1.622 1.784 3.944 41.146 0.000
d_volat_1 ~~ d_volat_1 0.099 0.021 0.177 0.990 2.491 0.013
volat_t1 ~~ d_volat_1 -0.030 -0.083 0.022 -0.223 -1.132 0.258
d_volat_1 ~ sa07_12_t1 -0.031 -0.094 0.032 -0.098 -0.967 0.334
sa07_12_t1 ~~ sa07_12_t1 0.997 0.891 1.103 1.000 18.422 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (ideal personality) is not significantly different from zero, b = -0.031, p = 0.334.

6.7.5.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9398.728 9514.208 0.983 0.025 0.046
# parameters of interest
params_lcs_volat_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.913 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.667 NA NA
d_volat_1 ~1 0.020 -0.039 0.079 0.067 0.667 0.505
volat_t1 ~1 1.704 1.624 1.785 4.124 41.364 0.000
d_volat_1 ~~ d_volat_1 0.090 0.019 0.160 0.983 2.492 0.013
volat_t1 ~~ d_volat_1 -0.032 -0.080 0.017 -0.264 -1.291 0.197
volat_t1 ~ frequ -0.124 -0.220 -0.028 -0.210 -2.539 0.011
d_volat_1 ~ frequ -0.057 -0.151 0.038 -0.132 -1.179 0.238
frequ ~~ frequ 0.489 0.329 0.650 1.000 5.990 0.000

The moderation effect of the frequency of self-acceptance behaviors with the volatility change score (ideal personality) is not significantly different from zero, b = -0.057, p = 0.238.

6.7.5.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8249.787 8338.321 0.986 0.021 0.041
# parameters of interest
params_lcs_curio_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.045 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.686 NA NA
d_curio_1 ~1 0.013 -0.029 0.056 0.066 0.605 0.545
curio_t1 ~1 4.494 4.427 4.561 14.812 131.046 0.000
d_curio_1 ~~ d_curio_1 0.039 -0.006 0.085 0.997 1.696 0.090
curio_t1 ~~ d_curio_1 -0.024 -0.049 0.001 -0.407 -1.898 0.058
d_curio_1 ~ sa07_13_t1 -0.012 -0.061 0.038 -0.059 -0.464 0.643
sa07_13_t1 ~~ sa07_13_t1 0.997 0.881 1.114 1.000 16.764 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (ideal personality) is not significantly different from zero, b = -0.012, p = 0.643.

6.7.5.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9845.228 9960.707 0.986 0.022 0.043
# parameters of interest
params_lcs_curio_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.043 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.685 NA NA
d_curio_1 ~1 0.013 -0.030 0.056 0.065 0.602 0.547
curio_t1 ~1 4.494 4.427 4.561 14.718 130.915 0.000
d_curio_1 ~~ d_curio_1 0.040 -0.006 0.086 0.995 1.697 0.090
curio_t1 ~~ d_curio_1 -0.024 -0.050 0.001 -0.405 -1.863 0.062
curio_t1 ~ frequ 0.062 -0.019 0.143 0.145 1.503 0.133
d_curio_1 ~ frequ 0.019 -0.061 0.099 0.067 0.462 0.644
frequ ~~ frequ 0.507 0.344 0.671 1.000 6.086 0.000

The moderation effect of the frequency of self-acceptance behaviors with the curiosity change score (ideal personality) is not significantly different from zero, b = 0.019, p = 0.644.

6.7.5.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8314.681 8403.216 0.986 0.032 0.041
# parameters of interest
params_lcs_aesth_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.948 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.670 NA NA
d_aesth_1 ~1 0.001 -0.003 0.005 0.047 0.611 0.541
aesth_t1 ~1 2.792 2.663 2.920 79.149 42.534 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.999 4.305 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.273 -1.818 0.069
d_aesth_1 ~ sa07_14_t1 0.001 -0.003 0.005 0.033 0.414 0.679
sa07_14_t1 ~~ sa07_14_t1 0.997 0.901 1.093 1.000 20.436 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (ideal personality) is not significantly different from zero, b = 0.001, p = 0.679.

6.7.5.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9894.983 10010.46 0.981 0.035 0.046
# parameters of interest
params_lcs_aesth_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.952 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.672 NA NA
d_aesth_1 ~1 0.001 -0.003 0.005 0.044 0.573 0.567
aesth_t1 ~1 2.792 2.663 2.920 80.294 42.530 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.985 4.292 0.000
aesth_t1 ~~ d_aesth_1 0.000 -0.001 0.000 -0.308 -1.989 0.047
aesth_t1 ~ frequ -0.009 -0.015 -0.002 -0.177 -2.673 0.008
d_aesth_1 ~ frequ -0.004 -0.010 0.002 -0.122 -1.358 0.174
frequ ~~ frequ 0.489 0.330 0.649 1.000 6.020 0.000

The moderation effect of the frequency of self-acceptance behaviors with the aesthetic change score (ideal personality) is not significantly different from zero, b = -0.004, p = 0.174.

6.7.5.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7653.347 7741.881 0.932 0.048 0.055
# parameters of interest
params_lcs_imagi_ideal_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.875 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.550 NA NA
d_imagi_1 ~1 -0.043 -0.091 0.004 -0.211 -1.778 0.075
imagi_t1 ~1 4.603 4.544 4.663 14.086 151.368 0.000
d_imagi_1 ~~ d_imagi_1 0.042 0.000 0.084 0.990 1.963 0.050
imagi_t1 ~~ d_imagi_1 -0.004 -0.033 0.025 -0.061 -0.272 0.786
d_imagi_1 ~ sa07_15_t1 0.020 -0.025 0.065 0.098 0.884 0.377
sa07_15_t1 ~~ sa07_15_t1 0.997 0.910 1.084 1.000 22.520 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (ideal personality) is not significantly different from zero, b = 0.02, p = 0.377.

6.7.5.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9242.56 9358.04 0.947 0.044 0.052
# parameters of interest
params_lcs_imagi_ideal_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_ideal_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.873 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.554 NA NA
d_imagi_1 ~1 -0.044 -0.093 0.005 -0.210 -1.778 0.075
imagi_t1 ~1 4.604 4.544 4.664 13.829 150.953 0.000
d_imagi_1 ~~ d_imagi_1 0.045 0.001 0.088 0.999 1.993 0.046
imagi_t1 ~~ d_imagi_1 -0.005 -0.037 0.026 -0.077 -0.327 0.743
imagi_t1 ~ frequ 0.091 0.002 0.179 0.190 1.997 0.046
d_imagi_1 ~ frequ 0.007 -0.073 0.087 0.023 0.171 0.864
frequ ~~ frequ 0.490 0.328 0.653 1.000 5.910 0.000

The moderation effect of the frequency of self-acceptance behaviors with the imagination change score (ideal personality) is not significantly different from zero, b = 0.007, p = 0.864.

6.7.6 Big Five facets (current personality)

6.7.6.1 Sociability - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8125.355 8213.89 0.974 0.062 0.041
# parameters of interest
params_lcs_socia_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ sa07_01_t1", "sa07_01_t1 ~~ sa07_01_t1", "d_socia_1 ~ sa07_01_t1", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.027 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.433 NA NA
d_socia_1 ~1 0.180 0.108 0.251 0.471 4.920 0.000
socia_t1 ~1 2.823 2.705 2.941 3.125 46.883 0.000
d_socia_1 ~~ d_socia_1 0.136 0.066 0.206 0.936 3.804 0.000
socia_t1 ~~ d_socia_1 -0.048 -0.104 0.008 -0.170 -1.670 0.095
d_socia_1 ~ sa07_01_t1 0.097 0.032 0.162 0.253 2.921 0.003
sa07_01_t1 ~~ sa07_01_t1 0.995 0.894 1.096 1.000 19.299 0.000

The facet-specific acceptance goal significantly moderates changes in sociability (current personality), b = 0.097, p = 0.003.

6.7.6.2 Sociability - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9798.574 9914.054 0.964 0.061 0.052
# parameters of interest
params_lcs_socia_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_socia_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                           "d_socia_1 ~ frequ", "frequ ~~ frequ", "socia_t1 ~ frequ", # frequency of self improvement
                           "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                           "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.026 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.433 NA NA
d_socia_1 ~1 0.175 0.104 0.247 0.468 4.804 0.000
socia_t1 ~1 2.824 2.693 2.956 3.186 42.076 0.000
d_socia_1 ~~ d_socia_1 0.131 0.062 0.201 0.936 3.698 0.000
socia_t1 ~~ d_socia_1 -0.090 -0.158 -0.021 -0.280 -2.570 0.010
socia_t1 ~ frequ 0.004 -0.179 0.187 0.003 0.042 0.967
d_socia_1 ~ frequ 0.136 0.030 0.242 0.254 2.512 0.012
frequ ~~ frequ 0.487 0.327 0.647 1.000 5.967 0.000

The frequency of self-acceptance behaviors significantly moderates changes in sociability (current personality), b = 0.136, p = 0.012.

6.7.6.3 Assertiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8545.988 8634.522 0.959 0.063 0.045
# parameters of interest
params_lcs_asser_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ sa07_02_t1", "sa07_02_t1 ~~ sa07_02_t1", "d_asser_1 ~ sa07_02_t1", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.037 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.558 NA NA
d_asser_1 ~1 0.095 0.032 0.158 0.251 2.941 0.003
asser_t1 ~1 3.126 3.021 3.232 4.462 58.157 0.000
d_asser_1 ~~ d_asser_1 0.137 0.071 0.203 0.963 4.068 0.000
asser_t1 ~~ d_asser_1 -0.068 -0.116 -0.019 -0.285 -2.719 0.007
d_asser_1 ~ sa07_02_t1 0.073 0.009 0.137 0.193 2.241 0.025
sa07_02_t1 ~~ sa07_02_t1 0.997 0.899 1.095 1.000 19.979 0.000

The facet-specific acceptance goal significantly moderates changes in assertiveness (current personality), b = 0.073, p = 0.025.

6.7.6.4 Assertiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10165.87 10281.35 0.974 0.044 0.045
# parameters of interest
params_lcs_asser_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_asser_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                           "d_asser_1 ~ frequ", "frequ ~~ frequ", "asser_t1 ~ frequ", # frequency of self improvement
                           "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                           "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.032 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.559 NA NA
d_asser_1 ~1 0.084 0.026 0.142 0.237 2.836 0.005
asser_t1 ~1 3.131 3.018 3.245 4.767 54.167 0.000
d_asser_1 ~~ d_asser_1 0.118 0.060 0.175 0.929 4.027 0.000
asser_t1 ~~ d_asser_1 -0.083 -0.133 -0.034 -0.373 -3.283 0.001
asser_t1 ~ frequ 0.110 -0.050 0.269 0.112 1.349 0.177
d_asser_1 ~ frequ 0.142 0.039 0.244 0.266 2.718 0.007
frequ ~~ frequ 0.446 0.275 0.616 1.000 5.123 0.000

The frequency of self-acceptance behaviors significantly moderates changes in assertiveness (current personality), b = 0.142, p = 0.007.

6.7.6.5 Energy - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8541.806 8630.34 0.972 0.052 0.047
# parameters of interest
params_lcs_energ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ sa07_03_t1", "sa07_03_t1 ~~ sa07_03_t1", "d_energ_1 ~ sa07_03_t1", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.039 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.671 NA NA
d_energ_1 ~1 0.108 0.049 0.166 0.328 3.615 0.000
energ_t1 ~1 3.314 3.213 3.414 6.525 64.624 0.000
d_energ_1 ~~ d_energ_1 0.103 0.038 0.168 0.957 3.121 0.002
energ_t1 ~~ d_energ_1 -0.043 -0.075 -0.010 -0.325 -2.549 0.011
d_energ_1 ~ sa07_03_t1 0.068 0.017 0.120 0.208 2.590 0.010
sa07_03_t1 ~~ sa07_03_t1 0.996 0.900 1.093 1.000 20.241 0.000

The facet-specific acceptance goal significantly moderates changes in energy (current personality), b = 0.068, p = 0.01.

6.7.6.6 Energy - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10214.27 10329.75 0.958 0.056 0.055
# parameters of interest
params_lcs_energ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_energ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                           "d_energ_1 ~ frequ", "frequ ~~ frequ", "energ_t1 ~ frequ", # frequency of self improvement
                           "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                           "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.037 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.665 NA NA
d_energ_1 ~1 0.107 0.048 0.166 0.333 3.564 0.000
energ_t1 ~1 3.313 3.208 3.419 6.619 61.360 0.000
d_energ_1 ~~ d_energ_1 0.096 0.034 0.157 0.929 3.037 0.002
energ_t1 ~~ d_energ_1 -0.069 -0.116 -0.023 -0.459 -2.909 0.004
energ_t1 ~ frequ 0.164 0.041 0.286 0.215 2.621 0.009
d_energ_1 ~ frequ 0.130 0.025 0.235 0.267 2.435 0.015
frequ ~~ frequ 0.432 0.274 0.590 1.000 5.363 0.000

The frequency of self-acceptance behaviors significantly moderates changes in energy (current personality), b = 0.13, p = 0.015.

6.7.6.7 Compassion - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8535.874 8624.408 0.956 0.052 0.047
# parameters of interest
params_lcs_compa_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ sa07_04_t1", "sa07_04_t1 ~~ sa07_04_t1", "d_compa_1 ~ sa07_04_t1", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.126 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.717 NA NA
d_compa_1 ~1 0.084 -0.004 0.172 0.164 1.881 0.060
compa_t1 ~1 4.135 4.037 4.233 5.125 82.861 0.000
d_compa_1 ~~ d_compa_1 0.259 0.086 0.433 0.981 2.925 0.003
compa_t1 ~~ d_compa_1 -0.185 -0.320 -0.050 -0.468 -2.692 0.007
d_compa_1 ~ sa07_04_t1 0.071 -0.010 0.152 0.138 1.710 0.087
sa07_04_t1 ~~ sa07_04_t1 0.997 0.891 1.103 1.000 18.460 0.000

The moderation effect of the facet-specific acceptance goal with the compassion change score (current personality) is not significantly different from zero, b = 0.071, p = 0.087.

6.7.6.8 Compassion - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10115.88 10231.36 0.967 0.043 0.049
# parameters of interest
params_lcs_compa_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_compa_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                           "d_compa_1 ~ frequ", "frequ ~~ frequ", "compa_t1 ~ frequ", # frequency of self improvement
                           "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                           "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.121 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.711 NA NA
d_compa_1 ~1 0.081 -0.004 0.165 0.161 1.859 0.063
compa_t1 ~1 4.137 4.037 4.237 5.249 81.113 0.000
d_compa_1 ~~ d_compa_1 0.244 0.088 0.400 0.977 3.067 0.002
compa_t1 ~~ d_compa_1 -0.205 -0.334 -0.077 -0.549 -3.132 0.002
compa_t1 ~ frequ 0.323 0.162 0.484 0.283 3.922 0.000
d_compa_1 ~ frequ 0.109 -0.027 0.245 0.151 1.567 0.117
frequ ~~ frequ 0.477 0.324 0.631 1.000 6.093 0.000

The moderation effect of the frequency of self-acceptance behaviors with the compassion change score (current personality) is not significantly different from zero, b = 0.109, p = 0.117.

6.7.6.9 Respectfulness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7514.271 7602.805 0.952 0.064 0.051
# parameters of interest
params_lcs_respe_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ sa07_05_t1", "sa07_05_t1 ~~ sa07_05_t1", "d_respe_1 ~ sa07_05_t1", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.015 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.599 NA NA
d_respe_1 ~1 0.056 0.009 0.103 0.199 2.350 0.019
respe_t1 ~1 4.435 4.367 4.502 9.247 128.989 0.000
d_respe_1 ~~ d_respe_1 0.075 0.028 0.122 0.938 3.155 0.002
respe_t1 ~~ d_respe_1 -0.030 -0.064 0.005 -0.247 -1.683 0.092
d_respe_1 ~ sa07_05_t1 0.071 0.013 0.128 0.249 2.422 0.015
sa07_05_t1 ~~ sa07_05_t1 0.997 0.833 1.161 1.000 11.925 0.000

The facet-specific acceptance goal significantly moderates changes in respectfulness (current personality) between T1 and T2, b = 0.071, p = 0.015.

6.7.6.10 Respectfulness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9124.464 9239.944 0.959 0.054 0.048
# parameters of interest
params_lcs_respe_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respe_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                           "d_respe_1 ~ frequ", "frequ ~~ frequ", "respe_t1 ~ frequ", # frequency of self improvement
                           "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                           "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.016 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.596 NA NA
d_respe_1 ~1 0.055 0.009 0.102 0.200 2.327 0.020
respe_t1 ~1 4.435 4.365 4.506 9.412 123.008 0.000
d_respe_1 ~~ d_respe_1 0.076 0.029 0.123 0.991 3.160 0.002
respe_t1 ~~ d_respe_1 -0.045 -0.082 -0.009 -0.367 -2.439 0.015
respe_t1 ~ frequ 0.208 0.110 0.306 0.303 4.148 0.000
d_respe_1 ~ frequ 0.038 -0.044 0.120 0.094 0.903 0.367
frequ ~~ frequ 0.473 0.320 0.625 1.000 6.061 0.000

The moderation effect of the frequency of self-acceptance behaviors with the respectfulness change score (current personality) is not significantly different from zero, b = 0.038, p = 0.367.

6.7.6.11 Trust - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8675.146 8763.68 0.971 0.047 0.049
# parameters of interest
params_lcs_trust_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ sa07_06_t1", "sa07_06_t1 ~~ sa07_06_t1", "d_trust_1 ~ sa07_06_t1", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.047 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.534 NA NA
d_trust_1 ~1 0.084 0.019 0.148 0.259 2.532 0.011
trust_t1 ~1 3.106 2.992 3.220 4.903 53.264 0.000
d_trust_1 ~~ d_trust_1 0.104 0.006 0.203 0.999 2.076 0.038
trust_t1 ~~ d_trust_1 -0.068 -0.129 -0.008 -0.343 -2.216 0.027
d_trust_1 ~ sa07_06_t1 0.010 -0.053 0.073 0.031 0.316 0.752
sa07_06_t1 ~~ sa07_06_t1 0.997 0.901 1.093 1.000 20.381 0.000

The moderation effect of the facet-specific acceptance goal with the trust change score (current personality) is not significantly different from zero (at p < .001), b = 0.01, p = 0.752.

6.7.6.12 Trust - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10264.09 10379.57 0.943 0.061 0.067
# parameters of interest
params_lcs_trust_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_trust_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                           "d_trust_1 ~ frequ", "frequ ~~ frequ", "trust_t1 ~ frequ", # frequency of self improvement
                           "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                           "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.051 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.535 NA NA
d_trust_1 ~1 0.084 0.019 0.148 0.258 2.553 0.011
trust_t1 ~1 3.106 2.991 3.221 4.873 52.879 0.000
d_trust_1 ~~ d_trust_1 0.100 0.003 0.198 0.953 2.019 0.044
trust_t1 ~~ d_trust_1 -0.080 -0.147 -0.013 -0.402 -2.336 0.019
trust_t1 ~ frequ 0.169 0.006 0.332 0.183 2.035 0.042
d_trust_1 ~ frequ 0.102 0.001 0.202 0.216 1.976 0.048
frequ ~~ frequ 0.475 0.311 0.640 1.000 5.653 0.000

The frequency of self-acceptance behaviors significantly moderates changes in trust (current personality), b = 0.102, p = 0.048.

6.7.6.13 Organization - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8152.329 8240.864 0.959 0.081 0.04
# parameters of interest
params_lcs_organ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ sa07_07_t1", "sa07_07_t1 ~~ sa07_07_t1", "d_organ_1 ~ sa07_07_t1", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.051 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.471 NA NA
d_organ_1 ~1 0.146 0.069 0.223 0.299 3.727 0.000
organ_t1 ~1 3.036 2.924 3.147 2.782 53.331 0.000
d_organ_1 ~~ d_organ_1 0.233 0.129 0.336 0.973 4.410 0.000
organ_t1 ~~ d_organ_1 -0.120 -0.200 -0.041 -0.296 -2.957 0.003
d_organ_1 ~ sa07_07_t1 0.080 0.005 0.156 0.164 2.077 0.038
sa07_07_t1 ~~ sa07_07_t1 0.995 0.917 1.073 1.000 25.010 0.000

The facet-specific acceptance goal significantly moderates changes in organization (current personality), b = 0.08, p = 0.038.

6.7.6.14 Organization - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9880.905 9996.385 0.97 0.057 0.05
# parameters of interest
params_lcs_organ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_organ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                           "d_organ_1 ~ frequ", "frequ ~~ frequ", "organ_t1 ~ frequ", # frequency of self improvement
                           "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                           "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.054 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.476 NA NA
d_organ_1 ~1 0.142 0.069 0.215 0.303 3.804 0.000
organ_t1 ~1 3.042 2.902 3.183 2.931 42.469 0.000
d_organ_1 ~~ d_organ_1 0.216 0.121 0.312 0.986 4.456 0.000
organ_t1 ~~ d_organ_1 -0.174 -0.255 -0.093 -0.366 -4.196 0.000
organ_t1 ~ frequ 0.268 0.025 0.511 0.173 2.165 0.030
d_organ_1 ~ frequ 0.083 -0.048 0.214 0.119 1.239 0.215
frequ ~~ frequ 0.450 0.286 0.613 1.000 5.393 0.000

The moderation effect of the frequency of self-acceptance behaviors with the organization change score (current personality) is not significantly different from zero, b = 0.083, p = 0.215.

6.7.6.15 Productiveness - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8208.398 8296.932 0.983 0.046 0.038
# parameters of interest
params_lcs_produ_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ sa07_08_t1", "sa07_08_t1 ~~ sa07_08_t1", "d_produ_1 ~ sa07_08_t1", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.980 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.431 NA NA
d_produ_1 ~1 0.206 0.135 0.276 0.554 5.705 0.000
produ_t1 ~1 2.534 2.420 2.648 3.008 43.492 0.000
d_produ_1 ~~ d_produ_1 0.135 0.056 0.214 0.981 3.339 0.001
produ_t1 ~~ d_produ_1 -0.027 -0.084 0.031 -0.110 -0.909 0.364
d_produ_1 ~ sa07_08_t1 0.052 -0.014 0.117 0.139 1.546 0.122
sa07_08_t1 ~~ sa07_08_t1 0.996 0.904 1.088 1.000 21.216 0.000

The moderation effect of the facet-specific acceptance goal with the productiveness change score (current personality) is not significantly different from zero, b = 0.052, p = 0.122.

6.7.6.16 Productiveness - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9895.477 10010.96 0.968 0.054 0.056
# parameters of interest
params_lcs_produ_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_produ_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                           "d_produ_1 ~ frequ", "frequ ~~ frequ", "produ_t1 ~ frequ", # frequency of self improvement
                           "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                           "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 0.986 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.432 NA NA
d_produ_1 ~1 0.201 0.131 0.271 0.555 5.618 0.000
produ_t1 ~1 2.541 2.413 2.668 3.082 39.058 0.000
d_produ_1 ~~ d_produ_1 0.105 0.036 0.174 0.802 2.978 0.003
produ_t1 ~~ d_produ_1 -0.080 -0.146 -0.015 -0.307 -2.410 0.016
produ_t1 ~ frequ 0.241 -0.022 0.504 0.187 1.795 0.073
d_produ_1 ~ frequ 0.251 0.123 0.378 0.445 3.857 0.000
frequ ~~ frequ 0.410 0.234 0.586 1.000 4.569 0.000

The frequency of self-acceptance behaviors significantly moderates changes in productiveness (current personality), b = 0.251, p = 0.

6.7.6.17 Responsibility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8326.666 8415.2 0.897 0.096 0.079
# parameters of interest
params_lcs_respo_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ sa07_09_t1", "sa07_09_t1 ~~ sa07_09_t1", "d_respo_1 ~ sa07_09_t1", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.022 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.406 NA NA
d_respo_1 ~1 0.113 0.037 0.189 0.467 2.920 0.003
respo_t1 ~1 3.623 3.524 3.723 5.927 71.217 0.000
d_respo_1 ~~ d_respo_1 0.059 -0.012 0.129 0.995 1.630 0.103
respo_t1 ~~ d_respo_1 -0.042 -0.092 0.007 -0.320 -1.669 0.095
d_respo_1 ~ sa07_09_t1 -0.017 -0.075 0.041 -0.069 -0.566 0.571
sa07_09_t1 ~~ sa07_09_t1 0.997 0.906 1.087 1.000 21.616 0.000

The moderation effect of the facet-specific acceptance goal with the responsibility change score (current personality) is not significantly different from zero, b = -0.017, p = 0.571.

6.7.6.18 Responsibility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9960.735 10076.22 0.924 0.072 0.074
# parameters of interest
params_lcs_respo_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_respo_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                           "d_respo_1 ~ frequ", "frequ ~~ frequ", "respo_t1 ~ frequ", # frequency of self improvement
                           "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                           "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.011 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.394 NA NA
d_respo_1 ~1 0.116 0.054 0.179 0.455 3.639 0.000
respo_t1 ~1 3.623 3.521 3.725 5.533 69.428 0.000
d_respo_1 ~~ d_respo_1 0.060 0.001 0.120 0.926 1.995 0.046
respo_t1 ~~ d_respo_1 -0.045 -0.100 0.009 -0.287 -1.643 0.100
respo_t1 ~ frequ 0.172 0.013 0.331 0.180 2.121 0.034
d_respo_1 ~ frequ 0.101 0.004 0.198 0.272 2.045 0.041
frequ ~~ frequ 0.471 0.304 0.638 1.000 5.522 0.000

The frequency of self-acceptance behaviors significantly moderates changes in responsibility (current personality), b = 0.101, p = 0.041.

6.7.6.19 Anxiety - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8705.033 8793.568 0.981 0.04 0.033
# parameters of interest
params_lcs_anxie_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ sa07_10_t1", "sa07_10_t1 ~~ sa07_10_t1", "d_anxie_1 ~ sa07_10_t1", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.966 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.527 NA NA
d_anxie_1 ~1 -0.197 -0.282 -0.111 -0.411 -4.499 0.000
anxie_t1 ~1 3.310 3.188 3.433 3.766 52.821 0.000
d_anxie_1 ~~ d_anxie_1 0.217 0.091 0.343 0.946 3.385 0.001
anxie_t1 ~~ d_anxie_1 -0.042 -0.120 0.035 -0.117 -1.073 0.283
d_anxie_1 ~ sa07_10_t1 -0.112 -0.196 -0.027 -0.232 -2.593 0.010
sa07_10_t1 ~~ sa07_10_t1 0.995 0.908 1.083 1.000 22.302 0.000

The facet-specific acceptance goal significantly moderates changes in anxiety (current personality), b = -0.112, p = 0.01.

6.7.6.20 Anxiety - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10338.44 10453.92 0.969 0.046 0.047
# parameters of interest
params_lcs_anxie_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_anxie_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                           "d_anxie_1 ~ frequ", "frequ ~~ frequ", "anxie_t1 ~ frequ", # frequency of self improvement
                           "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                           "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.965 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.527 NA NA
d_anxie_1 ~1 -0.202 -0.291 -0.114 -0.410 -4.497 0.000
anxie_t1 ~1 3.314 3.186 3.442 3.663 50.838 0.000
d_anxie_1 ~~ d_anxie_1 0.203 0.078 0.327 0.832 3.193 0.001
anxie_t1 ~~ d_anxie_1 -0.062 -0.157 0.034 -0.153 -1.268 0.205
anxie_t1 ~ frequ 0.210 0.000 0.419 0.166 1.958 0.050
d_anxie_1 ~ frequ -0.282 -0.428 -0.135 -0.410 -3.772 0.000
frequ ~~ frequ 0.514 0.345 0.684 1.000 5.959 0.000

The frequency of self-acceptance behaviors significantly moderates changes in anxiety (current personality), b = -0.282, p = 0.

6.7.6.21 Depression - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8446.988 8535.523 0.96 0.075 0.047
# parameters of interest
params_lcs_depre_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ sa07_11_t1", "sa07_11_t1 ~~ sa07_11_t1", "d_depre_1 ~ sa07_11_t1", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.005 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.584 NA NA
d_depre_1 ~1 -0.194 -0.260 -0.127 -0.472 -5.722 0.000
depre_t1 ~1 3.035 2.913 3.158 4.301 48.551 0.000
d_depre_1 ~~ d_depre_1 0.164 0.089 0.239 0.975 4.299 0.000
depre_t1 ~~ d_depre_1 -0.065 -0.113 -0.016 -0.257 -2.585 0.010
d_depre_1 ~ sa07_11_t1 -0.065 -0.125 -0.004 -0.157 -2.096 0.036
sa07_11_t1 ~~ sa07_11_t1 0.995 0.914 1.076 1.000 23.981 0.000

The facet-specific acceptance goal significantly moderates changes in depression (current personality), b = -0.065, p = 0.036.

6.7.6.22 Depression - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10099.26 10214.74 0.95 0.072 0.062
# parameters of interest
params_lcs_depre_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_depre_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                           "d_depre_1 ~ frequ", "frequ ~~ frequ", "depre_t1 ~ frequ", # frequency of self improvement
                           "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                           "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.006 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.584 NA NA
d_depre_1 ~1 -0.197 -0.264 -0.129 -0.474 -5.677 0.000
depre_t1 ~1 3.037 2.911 3.162 4.253 47.362 0.000
d_depre_1 ~~ d_depre_1 0.151 0.082 0.220 0.882 4.294 0.000
depre_t1 ~~ d_depre_1 -0.081 -0.134 -0.028 -0.292 -2.978 0.003
depre_t1 ~ frequ 0.082 -0.075 0.238 0.081 1.023 0.306
d_depre_1 ~ frequ -0.201 -0.309 -0.093 -0.344 -3.648 0.000
frequ ~~ frequ 0.501 0.339 0.662 1.000 6.076 0.000

The frequency of self-acceptance behaviors significantly moderates changes in depression (current personality), b = -0.201, p = 0.

6.7.6.23 Volatility - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8547.731 8636.265 0.98 0.05 0.035
# parameters of interest
params_lcs_volat_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ sa07_12_t1", "sa07_12_t1 ~~ sa07_12_t1", "d_volat_1 ~ sa07_12_t1", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.062 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.649 NA NA
d_volat_1 ~1 -0.142 -0.223 -0.061 -0.249 -3.435 0.001
volat_t1 ~1 3.222 3.094 3.351 3.455 49.113 0.000
d_volat_1 ~~ d_volat_1 0.318 0.171 0.464 0.977 4.259 0.000
volat_t1 ~~ d_volat_1 -0.190 -0.290 -0.090 -0.375 -3.724 0.000
d_volat_1 ~ sa07_12_t1 -0.087 -0.175 0.002 -0.152 -1.917 0.055
sa07_12_t1 ~~ sa07_12_t1 0.998 0.892 1.104 1.000 18.416 0.000

The moderation effect of the facet-specific acceptance goal with the volatility change score (current personality) is not significantly different from zero, b = -0.087, p = 0.055.

6.7.6.24 Volatility - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 10153.09 10268.58 0.979 0.044 0.044
# parameters of interest
params_lcs_volat_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_volat_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                           "d_volat_1 ~ frequ", "frequ ~~ frequ", "volat_t1 ~ frequ", # frequency of self improvement
                           "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                           "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.061 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.648 NA NA
d_volat_1 ~1 -0.143 -0.225 -0.061 -0.250 -3.423 0.001
volat_t1 ~1 3.223 3.091 3.354 3.446 48.019 0.000
d_volat_1 ~~ d_volat_1 0.306 0.169 0.443 0.938 4.390 0.000
volat_t1 ~~ d_volat_1 -0.203 -0.300 -0.107 -0.394 -4.139 0.000
volat_t1 ~ frequ 0.089 -0.108 0.286 0.066 0.885 0.376
d_volat_1 ~ frequ -0.206 -0.363 -0.048 -0.250 -2.565 0.010
frequ ~~ frequ 0.482 0.316 0.648 1.000 5.692 0.000

The frequency of self-acceptance behaviors significantly moderates changes in volatility (current personality), b = -0.206, p = 0.01.

6.7.6.25 Curiosity - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8307.264 8395.798 0.963 0.046 0.05
# parameters of interest
params_lcs_curio_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ sa07_13_t1", "sa07_13_t1 ~~ sa07_13_t1", "d_curio_1 ~ sa07_13_t1", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.162 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.698 NA NA
d_curio_1 ~1 0.115 0.042 0.187 0.311 3.102 0.002
curio_t1 ~1 4.072 3.982 4.162 6.622 88.405 0.000
d_curio_1 ~~ d_curio_1 0.134 0.036 0.232 0.982 2.682 0.007
curio_t1 ~~ d_curio_1 -0.105 -0.197 -0.014 -0.509 -2.251 0.024
d_curio_1 ~ sa07_13_t1 0.050 -0.028 0.128 0.135 1.254 0.210
sa07_13_t1 ~~ sa07_13_t1 1.001 0.884 1.118 1.000 16.792 0.000

The moderation effect of the facet-specific acceptance goal with the curiosity change score (current personality) is not significantly different from zero (at p < .001), b = 0.05, p = 0.21.

6.7.6.26 Curiosity - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9929.452 10044.93 0.959 0.045 0.051
# parameters of interest
params_lcs_curio_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_curio_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                           "d_curio_1 ~ frequ", "frequ ~~ frequ", "curio_t1 ~ frequ", # frequency of self improvement
                           "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                           "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.167 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.701 NA NA
d_curio_1 ~1 0.114 0.040 0.188 0.307 3.031 0.002
curio_t1 ~1 4.072 3.978 4.167 6.580 84.436 0.000
d_curio_1 ~~ d_curio_1 0.124 0.025 0.222 0.896 2.467 0.014
curio_t1 ~~ d_curio_1 -0.119 -0.219 -0.018 -0.544 -2.318 0.020
curio_t1 ~ frequ -0.018 -0.143 0.108 -0.020 -0.276 0.783
d_curio_1 ~ frequ 0.168 0.045 0.291 0.322 2.668 0.008
frequ ~~ frequ 0.509 0.347 0.672 1.000 6.152 0.000

The frequency of self-acceptance behaviors significantly moderates changes in curiosity (current personality), b = 0.168, p = 0.008.

6.7.6.27 Aesthetic - specific, facet-level acceptance goal as moderator of change

Results summary (sa07_xx_t1 = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8393.408 8481.943 0.981 0.045 0.046
# parameters of interest
params_lcs_aesth_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ sa07_14_t1", "sa07_14_t1 ~~ sa07_14_t1", "d_aesth_1 ~ sa07_14_t1", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.091 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.652 NA NA
d_aesth_1 ~1 0.002 -0.002 0.006 0.075 1.040 0.298
aesth_t1 ~1 3.060 2.944 3.176 61.092 51.764 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.001 0.001 0.984 4.923 0.000
aesth_t1 ~~ d_aesth_1 -0.001 -0.001 0.000 -0.418 -4.568 0.000
d_aesth_1 ~ sa07_14_t1 0.004 0.000 0.008 0.128 1.771 0.077
sa07_14_t1 ~~ sa07_14_t1 0.997 0.902 1.093 1.000 20.435 0.000

The moderation effect of the facet-specific acceptance goal with the aesthetic change score (current personality) is not significantly different from zero, b = 0.004, p = 0.077.

6.7.6.28 Aesthetic - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9984.113 10099.59 0.986 0.035 0.045
# parameters of interest
params_lcs_aesth_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_aesth_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                           "d_aesth_1 ~ frequ", "frequ ~~ frequ", "aesth_t1 ~ frequ", # frequency of self improvement
                           "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                           "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 1.090 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.649 NA NA
d_aesth_1 ~1 0.002 -0.002 0.006 0.075 1.039 0.299
aesth_t1 ~1 3.060 2.944 3.176 61.133 51.726 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.001 0.001 0.963 4.993 0.000
aesth_t1 ~~ d_aesth_1 -0.001 -0.001 0.000 -0.466 -4.899 0.000
aesth_t1 ~ frequ 0.009 -0.001 0.018 0.122 1.767 0.077
d_aesth_1 ~ frequ 0.008 0.002 0.015 0.192 2.434 0.015
frequ ~~ frequ 0.486 0.331 0.641 1.000 6.149 0.000

The frequency of self-acceptance behaviors significantly moderates changes in aesthetic (current personality), b = 0.008, p = 0.015.

6.7.6.29 Imagination - specific, facet-level acceptance goal as moderator of change

Results summary (*sa07_$$_t1* = trait/facet specific acceptance goal):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_specif_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8108.847 8197.381 0.972 0.05 0.047
# parameters of interest
params_lcs_imagi_curr_specif_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_specif_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ sa07_15_t1", "sa07_15_t1 ~~ sa07_15_t1", "d_imagi_1 ~ sa07_15_t1", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_specif_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.078 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.561 NA NA
d_imagi_1 ~1 0.100 0.033 0.167 0.267 2.916 0.004
imagi_t1 ~1 3.624 3.529 3.719 5.045 74.848 0.000
d_imagi_1 ~~ d_imagi_1 0.136 0.051 0.220 0.971 3.137 0.002
imagi_t1 ~~ d_imagi_1 -0.088 -0.153 -0.023 -0.362 -2.638 0.008
d_imagi_1 ~ sa07_15_t1 0.064 -0.005 0.133 0.171 1.825 0.068
sa07_15_t1 ~~ sa07_15_t1 0.999 0.912 1.086 1.000 22.486 0.000

The moderation effect of the facet-specific acceptance goal with the imagination change score (current personality) is not significantly different from zero, b = 0.064, p = 0.068.

6.7.6.30 Imagination - frequency of self-acceptance behaviors as moderator of change

Results summary (frequ = frequency of self-acceptance behavior):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_frequ_hyp7) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 30 9729.514 9844.994 0.97 0.046 0.049
# parameters of interest
params_lcs_imagi_curr_frequ_hyp7 <- broom::tidy(fit_mi_lcs_imagi_curr_frequ_hyp7, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                           "d_imagi_1 ~ frequ", "frequ ~~ frequ", "imagi_t1 ~ frequ", # frequency of self improvement
                           "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                           "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_frequ_hyp7, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 1.080 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.560 NA NA
d_imagi_1 ~1 0.100 0.033 0.167 0.269 2.940 0.003
imagi_t1 ~1 3.622 3.524 3.721 5.052 71.929 0.000
d_imagi_1 ~~ d_imagi_1 0.126 0.046 0.205 0.910 3.101 0.002
imagi_t1 ~~ d_imagi_1 -0.113 -0.184 -0.042 -0.447 -3.125 0.002
imagi_t1 ~ frequ 0.099 -0.067 0.266 0.095 1.168 0.243
d_imagi_1 ~ frequ 0.162 0.049 0.275 0.300 2.818 0.005
frequ ~~ frequ 0.471 0.309 0.633 1.000 5.707 0.000

The frequency of self-acceptance behaviors significantly moderates changes in imagination (current personality), b = 0.162, p = 0.005.

6.7.7 Hyp 7: Effects summary

6.7.7.1 Summary: Ideal personality

Run models for all facets with a template & loop:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_main <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_mod <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7 <- df_table_hyp7_main %>% left_join(df_table_hyp7_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals -0.038 -0.096 0.207 -0.059 -0.100 0.383
extraversion Frequency -0.037 -0.096 0.210 0.012 0.023 0.788
agreeableness Goals -0.012 -0.037 0.609 0.044 0.076 0.491
agreeableness Frequency -0.011 -0.035 0.627 0.036 0.082 0.304
conscientiousness Goals 0.017 0.050 0.484 -0.001 -0.001 0.985
conscientiousness Frequency 0.018 0.051 0.476 0.024 0.048 0.558
neuroticism Goals 0.011 0.034 0.656 0.081 0.136 0.144
neuroticism Frequency 0.011 0.032 0.669 -0.018 -0.038 0.642
openness Goals -0.013 -0.057 0.506 0.026 0.061 0.499
openness Frequency -0.013 -0.056 0.515 0.022 0.065 0.493

No significant main effects. No moderator effects for ideal-level trait dimensions that are significantly different from zero.

Results summary across the Big Five facets: trait-specific acceptance goals (Goals) and frequency of self-acceptance behaviors (Frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals -0.058 -0.228 0.020 -0.023 -0.090 0.401
sociability Frequency -0.058 -0.229 0.020 -0.030 -0.084 0.443
assertiveness Goals -0.034 -0.167 0.075 -0.027 -0.132 0.162
assertiveness Frequency -0.033 -0.164 0.081 0.051 0.175 0.090
energy Goals 0.011 0.049 0.615 -0.050 -0.209 0.110
energy Frequency 0.011 0.047 0.634 0.001 0.004 0.968
compassion Goals -0.039 -0.117 0.276 -0.065 -0.194 0.079
compassion Frequency -0.041 -0.119 0.271 -0.084 -0.174 0.244
respectfulness Goals 0.007 0.030 0.757 0.015 0.061 0.562
respectfulness Frequency 0.007 0.030 0.754 0.057 0.165 0.101
trust Goals -0.030 -0.106 0.277 -0.020 -0.072 0.477
trust Frequency -0.029 -0.100 0.308 0.037 0.090 0.438
organization Goals -0.001 -0.005 0.955 0.013 0.060 0.482
organization Frequency -0.001 -0.005 0.951 0.043 0.151 0.124
productiveness Goals 0.026 0.097 0.318 0.003 0.012 0.881
productiveness Frequency 0.026 0.097 0.318 0.064 0.167 0.131
responsibility Goals 0.030 0.080 0.358 -0.008 -0.021 0.811
responsibility Frequency 0.030 0.080 0.358 0.005 0.009 0.929
anxiety Goals 0.046 0.180 0.109 -0.001 -0.006 0.966
anxiety Frequency 0.047 0.193 0.109 0.019 0.055 0.699
depression Goals -0.018 -0.081 0.334 -0.019 -0.086 0.350
depression Frequency -0.018 -0.082 0.328 -0.026 -0.082 0.402
volatility Goals 0.022 0.071 0.479 -0.031 -0.098 0.334
volatility Frequency 0.020 0.067 0.505 -0.057 -0.132 0.238
curiosity Goals 0.013 0.066 0.545 -0.012 -0.059 0.643
curiosity Frequency 0.013 0.065 0.547 0.019 0.067 0.644
aesthetic Goals 0.001 0.047 0.541 0.001 0.033 0.679
aesthetic Frequency 0.001 0.044 0.567 -0.004 -0.122 0.174
imagination Goals -0.043 -0.211 0.075 0.020 0.098 0.377
imagination Frequency -0.044 -0.210 0.075 0.007 0.023 0.864

No significant main effects (except for sociability in the frequency model). No moderator effects for ideal-level facets that are significantly different from zero.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot <- bind_rows(
  #traits
  params_lcs_extra_ideal_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_ideal_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_ideal_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_ideal_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_ideal_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_ideal_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_ideal_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_ideal_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_ideal_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_ideal_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_ideal_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_ideal_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_ideal_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_ideal_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_ideal_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_ideal_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_ideal_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_ideal_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_ideal_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_ideal_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_ideal_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_ideal_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_ideal_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_ideal_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_ideal_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_ideal_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_ideal_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_ideal_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_ideal_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_ideal_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_ideal_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_ideal_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_ideal_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_ideal_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_ideal_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_ideal_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_ideal_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_ideal_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_ideal_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_ideal_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot <- df_table_hyp7_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Ideal", levels = c("Ideal"), labels = c("Ideal"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses:

  • Ideal = ideal-level personality
  • Goals = specific, facet-level acceptance goal(s) as moderator
  • Frequency = frequency of self-acceptance behavior as moderator
Show the code
ggplot(df_table_hyp7_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#A9A9A9", "#000000")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

6.7.7.2 Summary: Current personality

Collect all relevant effects:

Show the code
# create df for table:

# main effects (change score)
df_table_hyp7_curr_main <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~1 "),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~1 "),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~1 "),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~1 "),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~1 "),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~1 "),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~1 "),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~1 "),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~1 "),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~1 "),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~1 "),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~1 "),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~1 "),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~1 "),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~1 "),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~1 "),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~1 "),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~1 "),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~1 "),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~1 "),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~1 ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_main = estimate, std_main = std.all, p_main = p.value)

# moderation effects
df_table_hyp7_curr_mod <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, est_mod = estimate, std_mod = std.all, p_mod = p.value)

# combine
df_table_hyp7_curr <- df_table_hyp7_curr_main %>% left_join(df_table_hyp7_curr_mod)

Results summary across the Big Five traits: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[1:10, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
extraversion Goals 0.168 0.455 0.000 0.202 0.360 0.000
extraversion Frequency 0.166 0.452 0.000 0.203 0.372 0.000
agreeableness Goals 0.042 0.200 0.018 0.075 0.200 0.077
agreeableness Frequency 0.043 0.201 0.019 0.057 0.176 0.087
conscientiousness Goals 0.153 0.432 0.000 0.040 0.087 0.257
conscientiousness Frequency 0.153 0.436 0.000 0.147 0.272 0.002
neuroticism Goals -0.183 -0.408 0.000 -0.119 -0.180 0.032
neuroticism Frequency -0.182 -0.409 0.000 -0.222 -0.352 0.000
openness Goals 0.076 0.249 0.001 0.092 0.170 0.042
openness Frequency 0.074 0.246 0.001 0.141 0.327 0.000

Significant main effects throughout (latent change in current personality dimensions) in the self-acceptance group. 8 out of 10 significant moderation effects by either the facet-specific acceptance goals or the frequency of self-acceptance behaviors.

Results summary across the Big Five facets: trait-specific acceptance goals (goals) and frequency of self-acceptance behaviors (frequency) as moderators on the latent change score. *_main* refers to the main effects (change scores) and *_mod* to the moderation effects.

kable(df_table_hyp7_curr[11:40, ], digits = 3)
trait moderator est_main std_main p_main est_mod std_mod p_mod
sociability Goals 0.180 0.471 0.000 0.097 0.253 0.003
sociability Frequency 0.175 0.468 0.000 0.136 0.254 0.012
assertiveness Goals 0.095 0.251 0.003 0.073 0.193 0.025
assertiveness Frequency 0.084 0.237 0.005 0.142 0.266 0.007
energy Goals 0.108 0.328 0.000 0.068 0.208 0.010
energy Frequency 0.107 0.333 0.000 0.130 0.267 0.015
compassion Goals 0.084 0.164 0.060 0.071 0.138 0.087
compassion Frequency 0.081 0.161 0.063 0.109 0.151 0.117
respectfulness Goals 0.056 0.199 0.019 0.071 0.249 0.015
respectfulness Frequency 0.055 0.200 0.020 0.038 0.094 0.367
trust Goals 0.084 0.259 0.011 0.010 0.031 0.752
trust Frequency 0.084 0.258 0.011 0.102 0.216 0.048
organization Goals 0.146 0.299 0.000 0.080 0.164 0.038
organization Frequency 0.142 0.303 0.000 0.083 0.119 0.215
productiveness Goals 0.206 0.554 0.000 0.052 0.139 0.122
productiveness Frequency 0.201 0.555 0.000 0.251 0.445 0.000
responsibility Goals 0.113 0.467 0.003 -0.017 -0.069 0.571
responsibility Frequency 0.116 0.455 0.000 0.101 0.272 0.041
anxiety Goals -0.197 -0.411 0.000 -0.112 -0.232 0.010
anxiety Frequency -0.202 -0.410 0.000 -0.282 -0.410 0.000
depression Goals -0.194 -0.472 0.000 -0.065 -0.157 0.036
depression Frequency -0.197 -0.474 0.000 -0.201 -0.344 0.000
volatility Goals -0.142 -0.249 0.001 -0.087 -0.152 0.055
volatility Frequency -0.143 -0.250 0.001 -0.206 -0.250 0.010
curiosity Goals 0.115 0.311 0.002 0.050 0.135 0.210
curiosity Frequency 0.114 0.307 0.002 0.168 0.322 0.008
aesthetic Goals 0.002 0.075 0.298 0.004 0.128 0.077
aesthetic Frequency 0.002 0.075 0.299 0.008 0.192 0.015
imagination Goals 0.100 0.267 0.004 0.064 0.171 0.068
imagination Frequency 0.100 0.269 0.003 0.162 0.300 0.005

Significant main effects (latent change in current personality facets) in the self-acceptance group for many of the facets, although much more often in the frequency models (for the dimensions these were quite similar - not sure what is going on here). More than half of the current personality facets have a significant moderation effects by either the facet-specific acceptance goals or the frequency of self-acceptance behaviors.

Prepare data frame for plotting:

Show the code
df_table_hyp7_plot_curr <- bind_rows(
  #traits
  params_lcs_extra_curr_specif_hyp7 %>% filter(term=="d_extra_1 ~ goals"),
  params_lcs_extra_curr_frequ_hyp7 %>% filter(term=="d_extra_1 ~ frequ"),
  params_lcs_agree_curr_specif_hyp7 %>% filter(term=="d_agree_1 ~ goals"),
  params_lcs_agree_curr_frequ_hyp7 %>% filter(term=="d_agree_1 ~ frequ"),
  params_lcs_consc_curr_specif_hyp7 %>% filter(term=="d_consc_1 ~ goals"),
  params_lcs_consc_curr_frequ_hyp7 %>% filter(term=="d_consc_1 ~ frequ"),
  params_lcs_neuro_curr_specif_hyp7 %>% filter(term=="d_neuro_1 ~ goals"),
  params_lcs_neuro_curr_frequ_hyp7 %>% filter(term=="d_neuro_1 ~ frequ"),
  params_lcs_openn_curr_specif_hyp7 %>% filter(term=="d_openn_1 ~ goals"),
  params_lcs_openn_curr_frequ_hyp7 %>% filter(term=="d_openn_1 ~ frequ"),
  #facets
  params_lcs_socia_curr_specif_hyp7 %>% filter(term=="d_socia_1 ~ sa07_01_t1"),
  params_lcs_socia_curr_frequ_hyp7 %>% filter(term=="d_socia_1 ~ frequ"),
  params_lcs_asser_curr_specif_hyp7 %>% filter(term=="d_asser_1 ~ sa07_02_t1"),
  params_lcs_asser_curr_frequ_hyp7 %>% filter(term=="d_asser_1 ~ frequ"),
  params_lcs_energ_curr_specif_hyp7 %>% filter(term=="d_energ_1 ~ sa07_03_t1"),
  params_lcs_energ_curr_frequ_hyp7 %>% filter(term=="d_energ_1 ~ frequ"),
  params_lcs_compa_curr_specif_hyp7 %>% filter(term=="d_compa_1 ~ sa07_04_t1"),
  params_lcs_compa_curr_frequ_hyp7 %>% filter(term=="d_compa_1 ~ frequ"),
  params_lcs_respe_curr_specif_hyp7 %>% filter(term=="d_respe_1 ~ sa07_05_t1"),
  params_lcs_respe_curr_frequ_hyp7 %>% filter(term=="d_respe_1 ~ frequ"),
  params_lcs_trust_curr_specif_hyp7 %>% filter(term=="d_trust_1 ~ sa07_06_t1"),
  params_lcs_trust_curr_frequ_hyp7 %>% filter(term=="d_trust_1 ~ frequ"),
  params_lcs_organ_curr_specif_hyp7 %>% filter(term=="d_organ_1 ~ sa07_07_t1"),
  params_lcs_organ_curr_frequ_hyp7 %>% filter(term=="d_organ_1 ~ frequ"),
  params_lcs_produ_curr_specif_hyp7 %>% filter(term=="d_produ_1 ~ sa07_08_t1"),
  params_lcs_produ_curr_frequ_hyp7 %>% filter(term=="d_produ_1 ~ frequ"),
  params_lcs_respo_curr_specif_hyp7 %>% filter(term=="d_respo_1 ~ sa07_09_t1"),
  params_lcs_respo_curr_frequ_hyp7 %>% filter(term=="d_respo_1 ~ frequ"),
  params_lcs_anxie_curr_specif_hyp7 %>% filter(term=="d_anxie_1 ~ sa07_10_t1"),
  params_lcs_anxie_curr_frequ_hyp7 %>% filter(term=="d_anxie_1 ~ frequ"),
  params_lcs_depre_curr_specif_hyp7 %>% filter(term=="d_depre_1 ~ sa07_11_t1"),
  params_lcs_depre_curr_frequ_hyp7 %>% filter(term=="d_depre_1 ~ frequ"),
  params_lcs_volat_curr_specif_hyp7 %>% filter(term=="d_volat_1 ~ sa07_12_t1"),
  params_lcs_volat_curr_frequ_hyp7 %>% filter(term=="d_volat_1 ~ frequ"),
  params_lcs_curio_curr_specif_hyp7 %>% filter(term=="d_curio_1 ~ sa07_13_t1"),
  params_lcs_curio_curr_frequ_hyp7 %>% filter(term=="d_curio_1 ~ frequ"),
  params_lcs_aesth_curr_specif_hyp7 %>% filter(term=="d_aesth_1 ~ sa07_14_t1"),
  params_lcs_aesth_curr_frequ_hyp7 %>% filter(term=="d_aesth_1 ~ frequ"),
  params_lcs_imagi_curr_specif_hyp7 %>% filter(term=="d_imagi_1 ~ sa07_15_t1"),
  params_lcs_imagi_curr_frequ_hyp7 %>% filter(term=="d_imagi_1 ~ frequ")
  ) %>% 
  mutate(trait = rep(names(b5_vars), each=2),
         moderator = rep(c("Goals", "Frequency"), 20)) %>% 
  select(trait, moderator, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_hyp7_plot_curr <- df_table_hyp7_plot_curr %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref = factor("Current", levels = c("Current"), labels = c("Current"))) %>% 
  mutate(moderator = factor(moderator, levels = c("Goals", "Frequency"), 
                            labels = c("Goals", "Frequency"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), 
                        labels = stringr::str_to_title(names(b5_vars))))

Plotting the effect size across all analyses:

  • Current = current-level personality
  • Goals = specific, facet-level acceptance goal(s) as moderator
  • Frequency = frequency of self-acceptance behavior as moderator
Show the code
ggplot(df_table_hyp7_plot_curr, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ ref + moderator, ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")


7 Exploratory results

7.1 Differences in change across experimental groups (a)

We will explore a) whether change in psychological well-being indicators as well as the difference between real- and ideal- self will differ across groups at follow-up.

7.1.1 Well-being change: differences across groups

7.1.1.1 Life satisfaction

Life satisfaction: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_swls_group_config <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2a", "lamb2b")*sw06_02_t1 + c("lamb3a", "lamb3b")*sw06_03_t1 + c("lamb4a", "lamb4b")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2a", "lamb2b")*sw06_02_t2 + c("lamb3a", "lamb3b")*sw06_03_t2 + c("lamb4a", "lamb4b")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score remains unconditional

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'
lcs_swls_group_config <- sem(mi_lcs_swls_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                             fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_swls_group_weak <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4a", "m4b")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_weak <- sem(mi_lcs_swls_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_swls_group_strong <- '
swls_t1 =~ 1*sw06_01_t1 + c("lamb2", "lamb2")*sw06_02_t1 + c("lamb3", "lamb3")*sw06_03_t1 + c("lamb4", "lamb4")*sw06_04_t1 # This specifies the measurement model for swls_t1 
swls_t2 =~ 1*sw06_01_t2 + c("lamb2", "lamb2")*sw06_02_t2 + c("lamb3", "lamb3")*sw06_03_t2 + c("lamb4", "lamb4")*sw06_04_t2 # This specifies the measurement model for swls_t2 with the equality constrained factor loadings

swls_t2 ~ 1*swls_t1     # This parameter regresses swls_t2 perfectly on swls_t1
d_swls_1 =~ 1*swls_t2   # This defines the latent change score factor as measured perfectly by scores on swls_t2
swls_t2 ~ 0*1           # This line constrains the intercept of swls_t2 to 0
swls_t2 ~~ 0*swls_t2    # This fixes the variance of swls_t2 to 0

d_swls_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
swls_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of swls_t1 
d_swls_1 ~~ c("d_var_a", "d_var_b")*d_swls_1   # This estimates the variance of the change scores 
swls_t1 ~~ c("wb_var_a", "wb_var_b")*swls_t1     # This estimates the variance of the swls_t1 
d_swls_1 ~~ c("fb_a", "fb_b")*swls_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

sw06_01_t1 ~~ c("cov1a", "cov1b")*sw06_01_t2   # This allows residual covariance on indicator X1 across T1 and T2
sw06_02_t1 ~~ c("cov2a", "cov2b")*sw06_02_t2   # This allows residual covariance on indicator X2 across T1 and T2
sw06_03_t1 ~~ c("cov3a", "cov3b")*sw06_03_t2   # This allows residual covariance on indicator X3 across T1 and T2
sw06_04_t1 ~~ c("cov4a", "cov4b")*sw06_04_t2   # This allows residual covariance on indicator X4 across T1 and T2

sw06_01_t1 ~~ c("res1a", "res1b")*sw06_01_t1   # This allows residual variance on indicator X1 at T1 
sw06_02_t1 ~~ c("res2a", "res2b")*sw06_02_t1   # This allows residual variance on indicator X2 at T1
sw06_03_t1 ~~ c("res3a", "res3b")*sw06_03_t1   # This allows residual variance on indicator X3 at T1
sw06_04_t1 ~~ c("res4a", "res4b")*sw06_04_t1   # This allows residual variance on indicator X4 at T1

sw06_01_t2 ~~ c("res1a", "res1b")*sw06_01_t2  # This allows residual variance on indicator X1 at T2 
sw06_02_t2 ~~ c("res2a", "res2b")*sw06_02_t2  # This allows residual variance on indicator X2 at T2 
sw06_03_t2 ~~ c("res3a", "res3b")*sw06_03_t2  # This allows residual variance on indicator X3 at T2
sw06_04_t2 ~~ c("res4a", "res4b")*sw06_04_t2  # This allows residual variance on indicator X4 at T2

sw06_01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
sw06_02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
sw06_03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1
sw06_04_t1 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T1

sw06_01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
sw06_02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
sw06_03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
sw06_04_t2 ~ c("m4", "m4")*1     # This estimates the intercept of X4 at T2
'

lcs_swls_group_strong <- sem(mi_lcs_swls_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Life satisfaction: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_swls_group_config, lcs_swls_group_weak, lcs_swls_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                      Df   AIC   BIC   Chisq Chisq diff Df diff Pr(>Chisq)  
lcs_swls_group_config 50 14267 14441  93.624                                
lcs_swls_group_weak   53 14269 14429 101.697     9.1169       3    0.02778 *
lcs_swls_group_strong 58 14263 14400 105.443     3.7681       5    0.58326  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_swls_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_swls_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int_a 0.311 0.473 6.988 0
d_swls_1 ~1 d_int_b 0.273 0.409 6.071 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_swls_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_swls_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_swls_1 ~1 d_int 0.291 0.442 9.175 0
d_swls_1 ~1 d_int 0.291 0.436 9.175 0

Slightly more positive change in life satisfaction in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_swls_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 52 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        58
  Number of equality constraints                    23

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                               101.696      93.809
  Degrees of freedom                                53          53
  P-value (Chi-square)                           0.000       0.000
  Scaling correction factor                                  1.084
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             54.733      50.488
    Self-Improvement                            46.963      43.321

Model Test Baseline Model:

  Test statistic                              3141.266    2318.950
  Degrees of freedom                                56          56
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.355

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.984       0.982
  Tucker-Lewis Index (TLI)                       0.983       0.981
                                                                  
  Robust Comparative Fit Index (CFI)                         0.986
  Robust Tucker-Lewis Index (TLI)                            0.985

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -7099.624   -7099.624
  Scaling correction factor                                  0.721
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -7048.776   -7048.776
  Scaling correction factor                                  1.128
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               14269.248   14269.248
  Bayesian (BIC)                             14429.229   14429.229
  Sample-size adjusted Bayesian (SABIC)      14318.095   14318.095

Root Mean Square Error of Approximation:

  RMSEA                                          0.051       0.046
  90 Percent confidence interval - lower         0.036       0.031
  90 Percent confidence interval - upper         0.066       0.061
  P-value H_0: RMSEA <= 0.050                    0.448       0.637
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.049
  90 Percent confidence interval - lower                     0.032
  90 Percent confidence interval - upper                     0.066
  P-value H_0: Robust RMSEA <= 0.050                         0.500
  P-value H_0: Robust RMSEA >= 0.080                         0.001

Standardized Root Mean Square Residual:

  SRMR                                           0.045       0.045

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.968    0.811
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.805    0.727
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    1.004    0.833
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.829    0.697
  swls_t2 =~                                                            
    s06_01_           1.000                               0.995    0.819
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.828    0.737
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    1.033    0.840
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.853    0.707
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.661    0.661

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.972    0.972

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_a)   -0.189    0.045   -4.190    0.000   -0.297   -0.297
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cov1)    0.106    0.055    1.924    0.054    0.106    0.218
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cov2)    0.216    0.047    4.585    0.000    0.216    0.375
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cov3)    0.128    0.042    3.070    0.002    0.128    0.288
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cov4)    0.272    0.051    5.316    0.000    0.272    0.375

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.311    0.045    6.988    0.000    0.473    0.473
    swls_t1 (wb__)    2.682    0.060   44.414    0.000    2.771    2.771
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.578    0.098    5.881    0.000    0.578    0.523
   .s06_03_  (m3a)   -0.038    0.109   -0.354    0.724   -0.038   -0.032
   .s06_04_  (m4a)    0.418    0.109    3.837    0.000    0.418    0.352
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2a)    0.578    0.098    5.881    0.000    0.578    0.515
   .s06_03_  (m3a)   -0.038    0.109   -0.354    0.724   -0.038   -0.031
   .s06_04_  (m4a)    0.418    0.109    3.837    0.000    0.418    0.347

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.433    0.070    6.211    0.000    1.000    1.000
    swls_t1 (wb__)    0.937    0.066   14.167    0.000    1.000    1.000
   .s06_01_ (res1)    0.486    0.060    8.077    0.000    0.486    0.342
   .s06_02_ (res2)    0.577    0.045   12.796    0.000    0.577    0.471
   .s06_03_ (res3)    0.444    0.048    9.269    0.000    0.444    0.305
   .s06_04_ (res4)    0.727    0.051   14.283    0.000    0.727    0.514
   .s06_01_ (res1)    0.486    0.060    8.077    0.000    0.486    0.329
   .s06_02_ (res2)    0.577    0.045   12.796    0.000    0.577    0.457
   .s06_03_ (res3)    0.444    0.048    9.269    0.000    0.444    0.294
   .s06_04_ (res4)    0.727    0.051   14.283    0.000    0.727    0.500


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 =~                                                            
    s06_01_           1.000                               0.917    0.820
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.763    0.690
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    0.952    0.828
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.786    0.657
  swls_t2 =~                                                            
    s06_01_           1.000                               1.019    0.847
    s06_02_ (lmb2)    0.832    0.031   27.204    0.000    0.848    0.727
    s06_03_ (lmb3)    1.038    0.033   31.249    0.000    1.058    0.854
    s06_04_ (lmb4)    0.857    0.034   25.098    0.000    0.874    0.695
  d_swls_1 =~                                                           
    swls_t2           1.000                               0.654    0.654

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t2 ~                                                             
    swls_t1           1.000                               0.900    0.900

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  swls_t1 ~~                                                            
    d_swl_1 (fb_b)   -0.123    0.040   -3.075    0.002   -0.202   -0.202
 .sw06_01_t1 ~~                                                         
   .s06_01_ (cv1b)    0.059    0.043    1.374    0.169    0.059    0.145
 .sw06_02_t1 ~~                                                         
   .s06_02_ (cv2b)    0.367    0.049    7.436    0.000    0.367    0.573
 .sw06_03_t1 ~~                                                         
   .s06_03_ (cv3b)    0.050    0.040    1.252    0.211    0.050    0.120
 .sw06_04_t1 ~~                                                         
   .s06_04_ (cv4b)    0.320    0.064    4.979    0.000    0.320    0.392

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_n_)    0.273    0.045    6.071    0.000    0.409    0.409
    swls_t1 (wb__)    2.705    0.058   46.978    0.000    2.949    2.949
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.570    0.102    5.612    0.000    0.570    0.515
   .s06_03_  (m3b)   -0.006    0.105   -0.056    0.956   -0.006   -0.005
   .s06_04_  (m4b)    0.526    0.109    4.801    0.000    0.526    0.439
   .s06_01_           0.000                               0.000    0.000
   .s06_02_  (m2b)    0.570    0.102    5.612    0.000    0.570    0.489
   .s06_03_  (m3b)   -0.006    0.105   -0.056    0.956   -0.006   -0.005
   .s06_04_  (m4b)    0.526    0.109    4.801    0.000    0.526    0.418

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .swls_t2           0.000                               0.000    0.000
    d_swl_1 (d_v_)    0.444    0.059    7.554    0.000    1.000    1.000
    swls_t1 (wb__)    0.841    0.070   11.982    0.000    1.000    1.000
   .s06_01_ (rs1b)    0.409    0.045    9.101    0.000    0.409    0.327
   .s06_02_ (rs2b)    0.641    0.050   12.911    0.000    0.641    0.524
   .s06_03_ (rs3b)    0.416    0.039   10.526    0.000    0.416    0.314
   .s06_04_ (rs4b)    0.816    0.062   13.191    0.000    0.816    0.569
   .s06_01_ (rs1b)    0.409    0.045    9.101    0.000    0.409    0.283
   .s06_02_ (rs2b)    0.641    0.050   12.911    0.000    0.641    0.471
   .s06_03_ (rs3b)    0.416    0.039   10.526    0.000    0.416    0.271
   .s06_04_ (rs4b)    0.816    0.062   13.191    0.000    0.816    0.517
7.1.1.2 Meaning in life

Meaning in life: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_meaning_group_config <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2a", "lamb2b")*meaning_par2_t1 + c("lamb3a", "lamb3b")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2a", "lamb2b")*meaning_par2_t2 + c("lamb3a", "lamb3b")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_meaning_group_config <- sem(mi_lcs_meaning_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_meaning_group_weak <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_weak <- sem(mi_lcs_meaning_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_meaning_group_strong <- '
meaning_t1 =~ 1*meaning_par1_t1 + c("lamb2", "lamb2")*meaning_par2_t1 + c("lamb3", "lamb3")*meaning_par3_t1 # This specifies the measurement model for meaning_t1 
meaning_t2 =~ 1*meaning_par1_t2 + c("lamb2", "lamb2")*meaning_par2_t2 + c("lamb3", "lamb3")*meaning_par3_t2 # This specifies the measurement model for meaning_t2 with the equality constrained factor loadings

meaning_t2 ~ 1*meaning_t1     # This parameter regresses meaning_t2 perfectly on meaning_t1
d_meaning_1 =~ 1*meaning_t2   # This defines the latent change score factor as measured perfectly by scores on meaning_t2
meaning_t2 ~ 0*1           # This line constrains the intercept of meaning_t2 to 0
meaning_t2 ~~ 0*meaning_t2    # This fixes the variance of meaning_t2 to 0

d_meaning_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
meaning_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of meaning_t1 
d_meaning_1 ~~ c("d_var_a", "d_var_b")*d_meaning_1   # This estimates the variance of the change scores 
meaning_t1 ~~ c("wb_var_a", "wb_var_b")*meaning_t1     # This estimates the variance of the meaning_t1 
d_meaning_1 ~~ c("fb_a", "fb_b")*meaning_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

meaning_par1_t1 ~~ c("cov1a", "cov1b")*meaning_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
meaning_par2_t1 ~~ c("cov2a", "cov2b")*meaning_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
meaning_par3_t1 ~~ c("cov3a", "cov3b")*meaning_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

meaning_par1_t1 ~~ c("res1a", "res1b")*meaning_par1_t1   # This allows residual variance on indicator X1 at T1 
meaning_par2_t1 ~~ c("res2a", "res2b")*meaning_par2_t1   # This allows residual variance on indicator X2 at T1
meaning_par3_t1 ~~ c("res3a", "res3b")*meaning_par3_t1   # This allows residual variance on indicator X3 at T1

meaning_par1_t2 ~~ c("res1a", "res1b")*meaning_par1_t2  # This allows residual variance on indicator X1 at T2 
meaning_par2_t2 ~~ c("res2a", "res2b")*meaning_par2_t2  # This allows residual variance on indicator X2 at T2 
meaning_par3_t2 ~~ c("res3a", "res3b")*meaning_par3_t2  # This allows residual variance on indicator X3 at T2

meaning_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
meaning_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
meaning_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

meaning_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
meaning_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
meaning_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_meaning_group_strong <- sem(mi_lcs_meaning_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Meaning in life: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_meaning_group_config, lcs_meaning_group_weak, lcs_meaning_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df   AIC   BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_meaning_group_config 24 10472 10609 38.067                              
lcs_meaning_group_weak   26 10470 10598 40.184     1.9319       2     0.3806
lcs_meaning_group_strong 30 10465 10575 43.526     3.3424       4     0.5022
# show model with varying latent change parameters 
# -> key parameter is "d_meaning_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_meaning_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int_a 0.255 0.316 5.075 0
d_meaning_1 ~1 d_int_b 0.301 0.364 5.965 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_meaning_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_meaning_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_meaning_1 ~1 d_int 0.278 0.344 7.798 0
d_meaning_1 ~1 d_int 0.278 0.337 7.798 0

Slightly more positive change in meaning in life in the Self-Improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_meaning_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 54 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                40.184      37.276
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.037       0.071
  Scaling correction factor                                  1.078
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             19.692      18.267
    Self-Improvement                            20.492      19.009

Model Test Baseline Model:

  Test statistic                              2964.407    2380.993
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.245

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.995       0.995
  Tucker-Lewis Index (TLI)                       0.994       0.994
                                                                  
  Robust Comparative Fit Index (CFI)                         0.996
  Robust Tucker-Lewis Index (TLI)                            0.995

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -5206.794   -5206.794
  Scaling correction factor                                  0.734
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -5186.702   -5186.702
  Scaling correction factor                                  1.117
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                               10469.587   10469.587
  Bayesian (BIC)                             10597.572   10597.572
  Sample-size adjusted Bayesian (SABIC)      10508.665   10508.665

Root Mean Square Error of Approximation:

  RMSEA                                          0.039       0.035
  90 Percent confidence interval - lower         0.010       0.000
  90 Percent confidence interval - upper         0.062       0.058
  P-value H_0: RMSEA <= 0.050                    0.764       0.851
  P-value H_0: RMSEA >= 0.080                    0.001       0.000
                                                                  
  Robust RMSEA                                               0.038
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.063
  P-value H_0: Robust RMSEA <= 0.050                         0.761
  P-value H_0: Robust RMSEA >= 0.080                         0.002

Standardized Root Mean Square Residual:

  SRMR                                           0.032       0.032

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.949    0.793
    mnn_2_1 (lmb2)    1.257    0.039   31.903    0.000    1.193    0.928
    mnn_3_1 (lmb3)    1.117    0.035   31.759    0.000    1.060    0.854
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.994    0.806
    mnn_2_2 (lmb2)    1.257    0.039   31.903    0.000    1.249    0.933
    mnn_3_2 (lmb3)    1.117    0.035   31.759    0.000    1.110    0.864
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.813    0.813

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               0.955    0.955

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_a)     -0.283    0.059   -4.781    0.000   -0.369   -0.369
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cov1)      0.292    0.042    7.008    0.000    0.292    0.548
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cov2)     -0.083    0.034   -2.417    0.016   -0.083   -0.361
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cov3)      0.152    0.032    4.703    0.000    0.152    0.364

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.255    0.050    5.075    0.000    0.316    0.316
    mnng_t1 (wb__)    3.290    0.061   53.595    0.000    3.466    3.466
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2a)   -0.260    0.143   -1.812    0.070   -0.260   -0.202
   .mnn_3_1  (m3a)   -0.046    0.129   -0.353    0.724   -0.046   -0.037
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2a)   -0.260    0.143   -1.812    0.070   -0.260   -0.194
   .mnn_3_2  (m3a)   -0.046    0.129   -0.353    0.724   -0.046   -0.035

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.653    0.095    6.887    0.000    1.000    1.000
    mnng_t1 (wb__)    0.901    0.083   10.800    0.000    1.000    1.000
   .mnn_1_1 (res1)    0.533    0.043   12.485    0.000    0.533    0.372
   .mnn_2_1 (res2)    0.230    0.035    6.535    0.000    0.230    0.139
   .mnn_3_1 (res3)    0.419    0.039   10.793    0.000    0.419    0.271
   .mnn_1_2 (res1)    0.533    0.043   12.485    0.000    0.533    0.350
   .mnn_2_2 (res2)    0.230    0.035    6.535    0.000    0.230    0.129
   .mnn_3_2 (res3)    0.419    0.039   10.793    0.000    0.419    0.254


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 =~                                                         
    mnn_1_1           1.000                               0.900    0.770
    mnn_2_1 (lmb2)    1.257    0.039   31.903    0.000    1.131    0.925
    mnn_3_1 (lmb3)    1.117    0.035   31.759    0.000    1.005    0.826
  meaning_t2 =~                                                         
    mnn_1_2           1.000                               0.940    0.783
    mnn_2_2 (lmb2)    1.257    0.039   31.903    0.000    1.182    0.931
    mnn_3_2 (lmb3)    1.117    0.035   31.759    0.000    1.050    0.838
  d_meaning_1 =~                                                        
    mnng_t2           1.000                               0.877    0.877

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t2 ~                                                          
    meaning_t1        1.000                               0.957    0.957

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  meaning_t1 ~~                                                           
    d_mnn_1 (fb_b)     -0.303    0.054   -5.601    0.000   -0.408   -0.408
 .meaning_par1_t1 ~~                                                      
   .mnn_1_2 (cv1b)      0.342    0.048    7.152    0.000    0.342    0.615
 .meaning_par2_t1 ~~                                                      
   .mnn_2_2 (cv2b)     -0.036    0.035   -1.037    0.300   -0.036   -0.168
 .meaning_par3_t1 ~~                                                      
   .mnn_3_2 (cv3b)      0.201    0.039    5.129    0.000    0.201    0.429

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_n_)    0.301    0.050    5.965    0.000    0.364    0.364
    mnng_t1 (wb__)    3.146    0.059   53.754    0.000    3.495    3.495
   .mnn_1_1           0.000                               0.000    0.000
   .mnn_2_1  (m2b)   -0.161    0.138   -1.170    0.242   -0.161   -0.132
   .mnn_3_1  (m3b)    0.028    0.119    0.234    0.815    0.028    0.023
   .mnn_1_2           0.000                               0.000    0.000
   .mnn_2_2  (m2b)   -0.161    0.138   -1.170    0.242   -0.161   -0.127
   .mnn_3_2  (m3b)    0.028    0.119    0.234    0.815    0.028    0.022

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .mnng_t2           0.000                               0.000    0.000
    d_mnn_1 (d_v_)    0.681    0.097    7.019    0.000    1.000    1.000
    mnng_t1 (wb__)    0.810    0.081   10.015    0.000    1.000    1.000
   .mnn_1_1 (rs1b)    0.556    0.048   11.598    0.000    0.556    0.407
   .mnn_2_1 (rs2b)    0.214    0.040    5.378    0.000    0.214    0.144
   .mnn_3_1 (rs3b)    0.470    0.044   10.739    0.000    0.470    0.317
   .mnn_1_2 (rs1b)    0.556    0.048   11.598    0.000    0.556    0.386
   .mnn_2_2 (rs2b)    0.214    0.040    5.378    0.000    0.214    0.133
   .mnn_3_2 (rs3b)    0.470    0.044   10.739    0.000    0.470    0.299
7.1.1.3 Self-esteem

Self-esteem: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_selfes_group_config <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2a", "lamb2b")*selfes_par2_t1 + c("lamb3a", "lamb3b")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2a", "lamb2b")*selfes_par2_t2 + c("lamb3a", "lamb3b")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_selfes_group_config <- sem(mi_lcs_selfes_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_selfes_group_weak <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_weak <- sem(mi_lcs_selfes_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_selfes_group_strong <- '
selfes_t1 =~ 1*selfes_par1_t1 + c("lamb2", "lamb2")*selfes_par2_t1 + c("lamb3", "lamb3")*selfes_par3_t1 # This specifies the measurement model for selfes_t1 
selfes_t2 =~ 1*selfes_par1_t2 + c("lamb2", "lamb2")*selfes_par2_t2 + c("lamb3", "lamb3")*selfes_par3_t2 # This specifies the measurement model for selfes_t2 with the equality constrained factor loadings

selfes_t2 ~ 1*selfes_t1     # This parameter regresses selfes_t2 perfectly on selfes_t1
d_selfes_1 =~ 1*selfes_t2   # This defines the latent change score factor as measured perfectly by scores on selfes_t2
selfes_t2 ~ 0*1           # This line constrains the intercept of selfes_t2 to 0
selfes_t2 ~~ 0*selfes_t2    # This fixes the variance of selfes_t2 to 0

d_selfes_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
selfes_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of selfes_t1 
d_selfes_1 ~~ c("d_var_a", "d_var_b")*d_selfes_1   # This estimates the variance of the change scores 
selfes_t1 ~~ c("wb_var_a", "wb_var_b")*selfes_t1     # This estimates the variance of the selfes_t1 
d_selfes_1 ~~ c("fb_a", "fb_b")*selfes_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

selfes_par1_t1 ~~ c("cov1a", "cov1b")*selfes_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
selfes_par2_t1 ~~ c("cov2a", "cov2b")*selfes_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
selfes_par3_t1 ~~ c("cov3a", "cov3b")*selfes_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

selfes_par1_t1 ~~ c("res1a", "res1b")*selfes_par1_t1   # This allows residual variance on indicator X1 at T1 
selfes_par2_t1 ~~ c("res2a", "res2b")*selfes_par2_t1   # This allows residual variance on indicator X2 at T1
selfes_par3_t1 ~~ c("res3a", "res3b")*selfes_par3_t1   # This allows residual variance on indicator X3 at T1

selfes_par1_t2 ~~ c("res1a", "res1b")*selfes_par1_t2  # This allows residual variance on indicator X1 at T2 
selfes_par2_t2 ~~ c("res2a", "res2b")*selfes_par2_t2  # This allows residual variance on indicator X2 at T2 
selfes_par3_t2 ~~ c("res3a", "res3b")*selfes_par3_t2  # This allows residual variance on indicator X3 at T2

selfes_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
selfes_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
selfes_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

selfes_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
selfes_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
selfes_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_selfes_group_strong <- sem(mi_lcs_selfes_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Self-esteem: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_selfes_group_config, lcs_selfes_group_weak, lcs_selfes_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                        Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_selfes_group_config 24 7347.4 7484.5 20.707                              
lcs_selfes_group_weak   26 7345.5 7473.4 22.790     2.0845       2     0.3527
lcs_selfes_group_strong 30 7343.4 7453.1 28.758     6.0206       4     0.1976
# show model with varying latent change parameters 
# -> key parameter is "d_selfes_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_selfes_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int_a 0.301 0.527 8.608 0
d_selfes_1 ~1 d_int_b 0.269 0.514 8.352 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_selfes_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_selfes_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_selfes_1 ~1 d_int 0.284 0.497 11.95 0
d_selfes_1 ~1 d_int 0.284 0.543 11.95 0

Slightly more positive change in self-esteem in the Self-Acceptance group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_selfes_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 67 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                22.790      21.782
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.645       0.701
  Scaling correction factor                                  1.046
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                              8.879       8.486
    Self-Improvement                            13.911      13.296

Model Test Baseline Model:

  Test statistic                              3753.491    3014.202
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.245

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    1.000       1.000
  Tucker-Lewis Index (TLI)                       1.001       1.002
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.002

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -3644.731   -3644.731
  Scaling correction factor                                  0.685
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -3633.336   -3633.336
  Scaling correction factor                                  1.062
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                7345.462    7345.462
  Bayesian (BIC)                              7473.447    7473.447
  Sample-size adjusted Bayesian (SABIC)       7384.540    7384.540

Root Mean Square Error of Approximation:

  RMSEA                                          0.000       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.035       0.032
  P-value H_0: RMSEA <= 0.050                    0.996       0.998
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.034
  P-value H_0: Robust RMSEA <= 0.050                         0.995
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.017       0.017

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.792    0.880
    slf_2_1 (lmb2)    1.148    0.026   44.540    0.000    0.909    0.917
    slf_3_1 (lmb3)    1.160    0.027   42.206    0.000    0.919    0.918
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.776    0.876
    slf_2_2 (lmb2)    1.148    0.026   44.540    0.000    0.891    0.914
    slf_3_2 (lmb3)    1.160    0.027   42.206    0.000    0.901    0.915
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.737    0.737

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               1.020    1.020

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_a)    -0.176    0.031   -5.609    0.000   -0.388   -0.388
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cov1)     0.076    0.014    5.571    0.000    0.076    0.414
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cov2)     0.059    0.014    4.105    0.000    0.059    0.375
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cov3)     0.036    0.015    2.456    0.014    0.036    0.229

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.301    0.035    8.608    0.000    0.527    0.527
    slfs_t1 (wb__)    3.129    0.048   65.182    0.000    3.953    3.953
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2a)   -0.475    0.088   -5.411    0.000   -0.475   -0.479
   .slf_3_1  (m3a)   -0.449    0.090   -4.997    0.000   -0.449   -0.449
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2a)   -0.475    0.088   -5.411    0.000   -0.475   -0.487
   .slf_3_2  (m3a)   -0.449    0.090   -4.997    0.000   -0.449   -0.456

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.327    0.044    7.492    0.000    1.000    1.000
    slfs_t1 (wb__)    0.627    0.046   13.582    0.000    1.000    1.000
   .slf_1_1 (res1)    0.182    0.015   12.431    0.000    0.182    0.226
   .slf_2_1 (res2)    0.157    0.018    8.958    0.000    0.157    0.160
   .slf_3_1 (res3)    0.157    0.016    9.664    0.000    0.157    0.157
   .slf_1_2 (res1)    0.182    0.015   12.431    0.000    0.182    0.232
   .slf_2_2 (res2)    0.157    0.018    8.958    0.000    0.157    0.165
   .slf_3_2 (res3)    0.157    0.016    9.664    0.000    0.157    0.162


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 =~                                                          
    slf_1_1           1.000                               0.721    0.852
    slf_2_1 (lmb2)    1.148    0.026   44.540    0.000    0.827    0.913
    slf_3_1 (lmb3)    1.160    0.027   42.206    0.000    0.836    0.887
  selfes_t2 =~                                                          
    slf_1_2           1.000                               0.749    0.861
    slf_2_2 (lmb2)    1.148    0.026   44.540    0.000    0.860    0.919
    slf_3_2 (lmb3)    1.160    0.027   42.206    0.000    0.870    0.894
  d_selfes_1 =~                                                         
    slfs_t2           1.000                               0.698    0.698

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t2 ~                                                           
    selfes_t1         1.000                               0.962    0.962

Covariances:
                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  selfes_t1 ~~                                                           
    d_slf_1 (fb_b)    -0.116    0.025   -4.648    0.000   -0.307   -0.307
 .selfes_par1_t1 ~~                                                      
   .slf_1_2 (cv1b)     0.082    0.016    5.204    0.000    0.082    0.416
 .selfes_par2_t1 ~~                                                      
   .slf_2_2 (cv2b)     0.013    0.013    0.983    0.325    0.013    0.096
 .selfes_par3_t1 ~~                                                      
   .slf_3_2 (cv3b)     0.051    0.018    2.819    0.005    0.051    0.271

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_n_)    0.269    0.032    8.352    0.000    0.514    0.514
    slfs_t1 (wb__)    3.126    0.043   72.987    0.000    4.336    4.336
   .slf_1_1           0.000                               0.000    0.000
   .slf_2_1  (m2b)   -0.412    0.087   -4.732    0.000   -0.412   -0.455
   .slf_3_1  (m3b)   -0.462    0.094   -4.892    0.000   -0.462   -0.489
   .slf_1_2           0.000                               0.000    0.000
   .slf_2_2  (m2b)   -0.412    0.087   -4.732    0.000   -0.412   -0.440
   .slf_3_2  (m3b)   -0.462    0.094   -4.892    0.000   -0.462   -0.474

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .slfs_t2           0.000                               0.000    0.000
    d_slf_1 (d_v_)    0.274    0.035    7.816    0.000    1.000    1.000
    slfs_t1 (wb__)    0.520    0.039   13.388    0.000    1.000    1.000
   .slf_1_1 (rs1b)    0.196    0.017   11.861    0.000    0.196    0.274
   .slf_2_1 (rs2b)    0.137    0.014    9.610    0.000    0.137    0.166
   .slf_3_1 (rs3b)    0.190    0.018   10.780    0.000    0.190    0.214
   .slf_1_2 (rs1b)    0.196    0.017   11.861    0.000    0.196    0.259
   .slf_2_2 (rs2b)    0.137    0.014    9.610    0.000    0.137    0.156
   .slf_3_2 (rs3b)    0.190    0.018   10.780    0.000    0.190    0.201
7.1.1.4 Self-concept clarity

Self-concept clarity: fitting multi-group models

Show the code
# adapt latent change score model from above and add grouping factor in estimation (also add vectorized equality constraints to the model)

# configural invariance
mi_lcs_concept_group_config <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2a", "lamb2b")*concept_par2_t1 + c("lamb3a", "lamb3b")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2a", "lamb2b")*concept_par2_t2 + c("lamb3a", "lamb3b")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'
lcs_concept_group_config <- sem(mi_lcs_concept_group_config, data=df_sbsa_wide_wb, estimator='mlr', 
                                fixed.x=FALSE, missing='fiml', group = "rando")

# weak invariance
mi_lcs_concept_group_weak <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int_a", "d_int_b")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int_a", "wb_int_b")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_weak <- sem(mi_lcs_concept_group_weak, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                           group = "rando", group.equal = "loadings")

# strong invariance
mi_lcs_concept_group_strong <- '
concept_t1 =~ 1*concept_par1_t1 + c("lamb2", "lamb2")*concept_par2_t1 + c("lamb3", "lamb3")*concept_par3_t1 # This specifies the measurement model for concept_t1 
concept_t2 =~ 1*concept_par1_t2 + c("lamb2", "lamb2")*concept_par2_t2 + c("lamb3", "lamb3")*concept_par3_t2 # This specifies the measurement model for concept_t2 with the equality constrained factor loadings

concept_t2 ~ 1*concept_t1     # This parameter regresses concept_t2 perfectly on concept_t1
d_concept_1 =~ 1*concept_t2   # This defines the latent change score factor as measured perfectly by scores on concept_t2
concept_t2 ~ 0*1           # This line constrains the intercept of concept_t2 to 0
concept_t2 ~~ 0*concept_t2    # This fixes the variance of concept_t2 to 0

d_concept_1 ~ c("d_int", "d_int")*1           # This estimates the intercept of the change score 
concept_t1 ~ c("wb_int", "wb_int")*1            # This estimates the intercept of concept_t1 
d_concept_1 ~~ c("d_var_a", "d_var_b")*d_concept_1   # This estimates the variance of the change scores 
concept_t1 ~~ c("wb_var_a", "wb_var_b")*concept_t1     # This estimates the variance of the concept_t1 
d_concept_1 ~~ c("fb_a", "fb_b")*concept_t1     # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

concept_par1_t1 ~~ c("cov1a", "cov1b")*concept_par1_t2   # This allows residual covariance on indicator X1 across T1 and T2
concept_par2_t1 ~~ c("cov2a", "cov2b")*concept_par2_t2   # This allows residual covariance on indicator X2 across T1 and T2
concept_par3_t1 ~~ c("cov3a", "cov3b")*concept_par3_t2   # This allows residual covariance on indicator X3 across T1 and T2

concept_par1_t1 ~~ c("res1a", "res1b")*concept_par1_t1   # This allows residual variance on indicator X1 at T1 
concept_par2_t1 ~~ c("res2a", "res2b")*concept_par2_t1   # This allows residual variance on indicator X2 at T1
concept_par3_t1 ~~ c("res3a", "res3b")*concept_par3_t1   # This allows residual variance on indicator X3 at T1

concept_par1_t2 ~~ c("res1a", "res1b")*concept_par1_t2  # This allows residual variance on indicator X1 at T2 
concept_par2_t2 ~~ c("res2a", "res2b")*concept_par2_t2  # This allows residual variance on indicator X2 at T2 
concept_par3_t2 ~~ c("res3a", "res3b")*concept_par3_t2  # This allows residual variance on indicator X3 at T2

concept_par1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
concept_par2_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
concept_par3_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

concept_par1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
concept_par2_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
concept_par3_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

lcs_concept_group_strong <- sem(mi_lcs_concept_group_strong, data=df_sbsa_wide_wb, estimator='mlr', fixed.x=FALSE, missing='fiml', 
                             group = "rando", group.equal = c("intercepts", "loadings"))

Self-concept clarity: results

# model comparison tests for measurement invariance
lavTestLRT(lcs_concept_group_config, lcs_concept_group_weak, lcs_concept_group_strong)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                         Df    AIC    BIC  Chisq Chisq diff Df diff Pr(>Chisq)
lcs_concept_group_config 24 8376.4 8513.5 32.823                              
lcs_concept_group_weak   26 8373.0 8500.9 33.355     0.4700       2     0.7906
lcs_concept_group_strong 30 8366.2 8475.9 34.649     1.2983       4     0.8617
# show model with varying latent change parameters 
# -> key parameter is "d_concept_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
kable(broom::tidy(lcs_concept_group_weak, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int_a 0.181 0.312 5.055 0
d_concept_1 ~1 d_int_b 0.224 0.414 6.635 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(lcs_concept_group_strong, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_concept_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_concept_1 ~1 d_int 0.204 0.351 8.27 0
d_concept_1 ~1 d_int 0.204 0.375 8.27 0

Slightly more positive change in self-concept clarity in the self-improvement group but no substantial differences according to the LRTs.

# whole model (weak invariance)
summary(lcs_concept_group_weak, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 58 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        44
  Number of equality constraints                    16

  Number of observations per group:               Used       Total
    Self-Acceptance                                347         347
    Self-Improvement                               367         368
  Number of missing patterns per group:                           
    Self-Acceptance                                  3            
    Self-Improvement                                 3            

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                33.355      32.673
  Degrees of freedom                                26          26
  P-value (Chi-square)                           0.152       0.172
  Scaling correction factor                                  1.021
    Yuan-Bentler correction (Mplus variant)                       
  Test statistic for each group:
    Self-Acceptance                             24.853      24.344
    Self-Improvement                             8.503       8.329

Model Test Baseline Model:

  Test statistic                              2699.514    2215.007
  Degrees of freedom                                30          30
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.219

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.997       0.997
  Tucker-Lewis Index (TLI)                       0.997       0.996
                                                                  
  Robust Comparative Fit Index (CFI)                         0.997
  Robust Tucker-Lewis Index (TLI)                            0.997

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4158.476   -4158.476
  Scaling correction factor                                  0.691
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4141.799   -4141.799
  Scaling correction factor                                  1.054
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8372.952    8372.952
  Bayesian (BIC)                              8500.937    8500.937
  Sample-size adjusted Bayesian (SABIC)       8412.030    8412.030

Root Mean Square Error of Approximation:

  RMSEA                                          0.028       0.027
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.053       0.052
  P-value H_0: RMSEA <= 0.050                    0.918       0.931
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.028
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.055
  P-value H_0: Robust RMSEA <= 0.050                         0.904
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.026       0.026

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian


Group 1 [Self-Acceptance]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.679    0.813
    cnc_2_1 (lmb2)    1.241    0.043   28.864    0.000    0.843    0.857
    cnc_3_1 (lmb3)    1.316    0.040   32.583    0.000    0.894    0.879
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.682    0.814
    cnc_2_2 (lmb2)    1.241    0.043   28.864    0.000    0.847    0.858
    cnc_3_2 (lmb3)    1.316    0.040   32.583    0.000    0.898    0.880
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.851    0.851

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               0.995    0.995

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_a)     -0.166    0.028   -5.893    0.000   -0.422   -0.422
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cov1)      0.032    0.019    1.656    0.098    0.032    0.135
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cov2)      0.086    0.024    3.565    0.000    0.086    0.335
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cov3)      0.084    0.025    3.399    0.001    0.084    0.357

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.181    0.036    5.055    0.000    0.312    0.312
    cncpt_1 (wb__)    2.919    0.043   68.408    0.000    4.297    4.297
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2a)   -0.493    0.136   -3.629    0.000   -0.493   -0.501
   .cnc_3_1  (m3a)   -1.037    0.126   -8.237    0.000   -1.037   -1.020
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2a)   -0.493    0.136   -3.629    0.000   -0.493   -0.499
   .cnc_3_2  (m3a)   -1.037    0.126   -8.237    0.000   -1.037   -1.016

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.337    0.046    7.360    0.000    1.000    1.000
    cncpt_1 (wb__)    0.461    0.038   12.099    0.000    1.000    1.000
   .cnc_1_1 (res1)    0.237    0.019   12.605    0.000    0.237    0.339
   .cnc_2_1 (res2)    0.258    0.025   10.267    0.000    0.258    0.266
   .cnc_3_1 (res3)    0.235    0.025    9.570    0.000    0.235    0.227
   .cnc_1_2 (res1)    0.237    0.019   12.605    0.000    0.237    0.337
   .cnc_2_2 (res2)    0.258    0.025   10.267    0.000    0.258    0.264
   .cnc_3_2 (res3)    0.235    0.025    9.570    0.000    0.235    0.226


Group 2 [Self-Improvement]:

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 =~                                                         
    cnc_1_1           1.000                               0.627    0.785
    cnc_2_1 (lmb2)    1.241    0.043   28.864    0.000    0.778    0.844
    cnc_3_1 (lmb3)    1.316    0.040   32.583    0.000    0.825    0.868
  concept_t2 =~                                                         
    cnc_1_2           1.000                               0.677    0.808
    cnc_2_2 (lmb2)    1.241    0.043   28.864    0.000    0.841    0.862
    cnc_3_2 (lmb3)    1.316    0.040   32.583    0.000    0.891    0.884
  d_concept_1 =~                                                        
    cncpt_2           1.000                               0.801    0.801

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t2 ~                                                          
    concept_t1        1.000                               0.926    0.926

Covariances:
                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  concept_t1 ~~                                                           
    d_cnc_1 (fb_b)     -0.114    0.022   -5.251    0.000   -0.336   -0.336
 .concept_par1_t1 ~~                                                      
   .cnc_1_2 (cv1b)      0.098    0.019    5.048    0.000    0.098    0.399
 .concept_par2_t1 ~~                                                      
   .cnc_2_2 (cv2b)      0.056    0.024    2.330    0.020    0.056    0.228
 .concept_par3_t1 ~~                                                      
   .cnc_3_2 (cv3b)      0.059    0.024    2.460    0.014    0.059    0.266

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_n_)    0.224    0.034    6.635    0.000    0.414    0.414
    cncpt_1 (wb__)    2.936    0.041   72.093    0.000    4.683    4.683
   .cnc_1_1           0.000                               0.000    0.000
   .cnc_2_1  (m2b)   -0.511    0.134   -3.804    0.000   -0.511   -0.555
   .cnc_3_1  (m3b)   -1.044    0.127   -8.222    0.000   -1.044   -1.099
   .cnc_1_2           0.000                               0.000    0.000
   .cnc_2_2  (m2b)   -0.511    0.134   -3.804    0.000   -0.511   -0.524
   .cnc_3_2  (m3b)   -1.044    0.127   -8.222    0.000   -1.044   -1.036

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .cncpt_2           0.000                               0.000    0.000
    d_cnc_1 (d_v_)    0.294    0.038    7.822    0.000    1.000    1.000
    cncpt_1 (wb__)    0.393    0.036   11.046    0.000    1.000    1.000
   .cnc_1_1 (rs1b)    0.245    0.018   13.471    0.000    0.245    0.384
   .cnc_2_1 (rs2b)    0.244    0.023   10.659    0.000    0.244    0.287
   .cnc_3_1 (rs3b)    0.222    0.024    9.208    0.000    0.222    0.246
   .cnc_1_2 (rs1b)    0.245    0.018   13.471    0.000    0.245    0.348
   .cnc_2_2 (rs2b)    0.244    0.023   10.659    0.000    0.244    0.257
   .cnc_3_2 (rs3b)    0.222    0.024    9.208    0.000    0.222    0.219

7.1.2 Current- and ideal personality personality differences across groups

Profile correlations by group and measurement occasion (mixed effects models) - results:

df_sbsa <- df_sbsa %>% mutate(time_d = time - 1)

psych::describeBy(df_sbsa$profile_corr_item_z, list(df_sbsa$rando, df_sbsa$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 342 0.36 0.48   0.36    0.35 0.47 -1.05 2.25   3.3 0.39     0.99 0.03
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 362 0.38 0.45   0.36    0.35 0.44 -0.71 2.01  2.72 0.59     0.68 0.02
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 326 0.55 0.58   0.49    0.51 0.52 -0.9 3.32  4.22    1     3.31 0.03
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 338 0.56 0.48   0.53    0.55 0.48 -0.77 2.27  3.04 0.19     0.25 0.03
psych::describeBy(df_sbsa$profile_corr_facet_z, list(df_sbsa$rando, df_sbsa$time_d))

 Descriptive statistics by group 
: Self-Acceptance
: 0
   vars   n mean   sd median trimmed  mad  min  max range skew kurtosis   se
X1    1 342 0.27 0.67   0.21    0.25 0.64 -1.5 2.67  4.17 0.46     0.68 0.04
------------------------------------------------------------ 
: Self-Improvement
: 0
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 362 0.29 0.63   0.23    0.25 0.65 -1.06 2.44   3.5 0.56     0.27 0.03
------------------------------------------------------------ 
: Self-Acceptance
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 326 0.49 0.76   0.45    0.46 0.72 -1.17 3.73   4.9 0.69      1.5 0.04
------------------------------------------------------------ 
: Self-Improvement
: 1
   vars   n mean   sd median trimmed  mad   min  max range skew kurtosis   se
X1    1 338 0.52 0.69    0.5     0.5 0.74 -1.22 2.54  3.77 0.17    -0.31 0.04
lm_profile_corr_item <- lmerTest::lmer(profile_corr_item_z ~ time_d * rando + (1 | pid), data = df_sbsa)
lm_profile_corr_facet <- lmerTest::lmer(profile_corr_facet_z ~ time_d * rando + (1 | pid), data = df_sbsa)

kable(bind_rows(as.data.frame(summary(lm_profile_corr_item)$coefficients), as.data.frame(summary(lm_profile_corr_facet)$coefficients)) %>% as_tibble() %>% mutate(outcome = c(rep("Item-level profile corr.", 4), rep("Facet-level profile corr.", 4)), term = c(rep(c("Intercept", "time", "group", "time*group"), 2))) %>% select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`), digits = 3)
outcome term Estimate Std. Error df t value p
Item-level profile corr. Intercept 0.361 0.027 967.869 13.410 0.000
Item-level profile corr. time 0.187 0.022 667.741 8.347 0.000
Item-level profile corr. group 0.016 0.038 968.479 0.425 0.671
Item-level profile corr. time*group -0.011 0.031 670.006 -0.360 0.719
Facet-level profile corr. Intercept 0.269 0.037 951.267 7.252 0.000
Facet-level profile corr. time 0.229 0.030 667.445 7.648 0.000
Facet-level profile corr. group 0.020 0.052 951.861 0.385 0.700
Facet-level profile corr. time*group -0.003 0.042 669.591 -0.080 0.937

Squared trait-/facet-differences by group and measurement occasion (mixed effects models) - results:

mod_traits_sqdiff_groups <- df_sbsa %>% 
  select(pid, time_d, rando, ends_with("_sqdiff")) %>% 
  pivot_longer(ends_with("_sqdiff"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_by(pid, test) %>% 
  mutate(assessments = n()) %>% 
  ungroup() %>% 
  filter(assessments==2) %>% 
  select(-assessments) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

mod_traits_sqdiff_groups_unlist <- as.data.frame(summary(mod_traits_sqdiff_groups[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(mod_traits_sqdiff_groups)) {
  mod_traits_sqdiff_groups_unlist <- bind_rows(mod_traits_sqdiff_groups_unlist, 
                                               as.data.frame(summary(mod_traits_sqdiff_groups[[i]])$coefficients) %>% as_tibble())
}

kable(mod_traits_sqdiff_groups_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        select(outcome, term, everything()) %>% rename(p = `Pr(>|t|)`) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))),  # order by BFI traits, 
      digits = 3)
outcome term Estimate Std. Error df t value p
extraversion Intercept 1.878 0.103 959.798 18.152 0.000
extraversion time -0.555 0.093 651.000 -5.975 0.000
extraversion group -0.064 0.145 959.798 -0.438 0.661
extraversion time*group 0.100 0.130 651.000 0.769 0.442
agreeableness Intercept 0.589 0.047 972.211 12.538 0.000
agreeableness time -0.150 0.043 651.000 -3.497 0.001
agreeableness group -0.063 0.066 972.211 -0.963 0.336
agreeableness time*group -0.021 0.060 651.000 -0.351 0.726
conscientiousness Intercept 1.873 0.108 919.365 17.281 0.000
conscientiousness time -0.387 0.091 651.000 -4.235 0.000
conscientiousness group -0.348 0.152 919.365 -2.287 0.022
conscientiousness time*group 0.126 0.128 651.000 0.987 0.324
neuroticism Intercept 3.407 0.183 854.426 18.585 0.000
neuroticism time -0.699 0.136 651.000 -5.131 0.000
neuroticism group -0.099 0.257 854.426 -0.384 0.701
neuroticism time*group 0.053 0.191 651.000 0.276 0.782
openness Intercept 0.490 0.039 1057.826 12.631 0.000
openness time -0.129 0.040 651.000 -3.258 0.001
openness group -0.023 0.054 1057.826 -0.423 0.673
openness time*group 0.021 0.055 651.000 0.374 0.708
sociability Intercept 2.992 0.166 929.743 18.009 0.000
sociability time -0.911 0.142 651.000 -6.398 0.000
sociability group -0.137 0.233 929.743 -0.589 0.556
sociability time*group 0.190 0.200 651.000 0.953 0.341
assertiveness Intercept 1.891 0.121 1060.149 15.604 0.000
assertiveness time -0.559 0.124 651.000 -4.517 0.000
assertiveness group -0.151 0.170 1060.149 -0.890 0.373
assertiveness time*group 0.135 0.174 651.000 0.779 0.436
energy Intercept 2.082 0.133 1045.145 15.642 0.000
energy time -0.502 0.134 651.000 -3.754 0.000
energy group -0.015 0.187 1045.145 -0.079 0.937
energy time*group 0.022 0.187 651.000 0.119 0.906
compassion Intercept 0.621 0.050 1119.816 12.439 0.000
compassion time -0.193 0.055 651.000 -3.543 0.000
compassion group -0.143 0.070 1119.816 -2.038 0.042
compassion time*group 0.084 0.076 651.000 1.101 0.271
respectfulness Intercept 0.666 0.060 1045.022 11.178 0.000
respectfulness time -0.145 0.060 651.000 -2.420 0.016
respectfulness group 0.008 0.084 1045.022 0.099 0.921
respectfulness time*group -0.039 0.084 651.000 -0.468 0.640
trust Intercept 1.250 0.096 1067.043 13.008 0.000
trust time -0.276 0.099 651.000 -2.784 0.006
trust group 0.012 0.135 1067.043 0.092 0.927
trust time*group -0.153 0.139 651.000 -1.102 0.271
organization Intercept 2.182 0.141 989.115 15.507 0.000
organization time -0.478 0.132 651.000 -3.633 0.000
organization group -0.489 0.197 989.115 -2.480 0.013
organization time*group 0.204 0.185 651.000 1.107 0.269
productiveness Intercept 3.108 0.172 901.841 18.114 0.000
productiveness time -0.543 0.140 651.000 -3.875 0.000
productiveness group -0.383 0.241 901.841 -1.593 0.112
productiveness time*group 0.028 0.197 651.000 0.141 0.888
responsibility Intercept 1.376 0.099 1011.321 13.859 0.000
responsibility time -0.300 0.096 651.000 -3.134 0.002
responsibility group -0.210 0.139 1011.321 -1.509 0.132
responsibility time*group 0.107 0.134 651.000 0.798 0.425
anxiety Intercept 4.092 0.227 947.361 17.991 0.000
anxiety time -0.667 0.200 651.000 -3.327 0.001
anxiety group -0.066 0.319 947.361 -0.208 0.835
anxiety time*group -0.063 0.281 651.000 -0.226 0.821
depression Intercept 4.202 0.219 890.115 19.154 0.000
depression time -0.986 0.175 651.000 -5.618 0.000
depression group -0.212 0.308 890.115 -0.689 0.491
depression time*group 0.166 0.246 651.000 0.674 0.501
volatility Intercept 2.957 0.192 902.039 15.412 0.000
volatility time -0.644 0.157 651.000 -4.104 0.000
volatility group -0.070 0.269 902.039 -0.262 0.793
volatility time*group 0.052 0.220 651.000 0.235 0.814
curiosity Intercept 0.534 0.053 1232.150 10.166 0.000
curiosity time -0.131 0.065 651.000 -2.024 0.043
curiosity group 0.025 0.074 1232.150 0.335 0.738
curiosity time*group -0.049 0.091 651.000 -0.535 0.593
aesthetic Intercept 0.501 0.051 1248.444 9.892 0.000
aesthetic time -0.167 0.064 651.000 -2.623 0.009
aesthetic group -0.066 0.071 1248.444 -0.935 0.350
aesthetic time*group 0.076 0.089 651.000 0.851 0.395
imagination Intercept 1.310 0.104 969.568 12.540 0.000
imagination time -0.319 0.095 651.000 -3.350 0.001
imagination group -0.103 0.147 969.568 -0.702 0.483
imagination time*group 0.158 0.133 651.000 1.184 0.237

With both conceptualizations of the similarity / difference of current- and ideal-level personality (profile correlations / squared differences), we find no significant effects of group (at T1; with few exceptions…) or of interaction effects of group by measurement occasion (at T2).

7.1.3 Latent change: differences in personality change

7.1.3.1 Run models

Adapt latent change score model from above (but without any moderation) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_main_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_main_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_main_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_current")), trait_main_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_config_ideal")), trait_main_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_current")), trait_main_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_weak_ideal")), trait_main_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_main_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_current")), trait_main_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_main_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = bind_rows(df_sbsa_wide_pers_sa_mod, df_sbsa_wide_pers_sb_mod) %>% left_join(group_assign), 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_main_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_main_strong_ideal")), trait_main_fit_strong_ideal))
}
7.1.3.2 Current personality personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_current, fit_lcs_extra_main_weak_current, fit_lcs_extra_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_current 24 7453.0 7590.2 33.135                   
fit_lcs_extra_main_weak_current   26 7453.3 7581.3 37.440     3.9027       2
fit_lcs_extra_main_strong_current 30 7446.1 7555.9 38.256     0.8182       4
                                  Pr(>Chisq)
fit_lcs_extra_main_config_current           
fit_lcs_extra_main_weak_current       0.1421
fit_lcs_extra_main_strong_current     0.9360
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_current <- broom::tidy(fit_lcs_extra_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a 0.159 0.452 6.119 0
d_extra_1 ~1 d_int_b 0.137 0.377 5.393 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.148 0.421 8.034 0
d_extra_1 ~1 d_int 0.148 0.407 8.034 0
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 7453.31 7581.334 0.995 0.035 0.028

Very similar change in extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_current, fit_lcs_agree_main_weak_current, fit_lcs_agree_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_current 24 6350.6 6487.7 46.417                   
fit_lcs_agree_main_weak_current   26 6346.9 6474.9 46.754     0.2694       2
fit_lcs_agree_main_strong_current 30 6343.3 6453.0 51.177     4.3924       4
                                  Pr(>Chisq)
fit_lcs_agree_main_config_current           
fit_lcs_agree_main_weak_current       0.8740
fit_lcs_agree_main_strong_current     0.3555
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_current <- broom::tidy(fit_lcs_agree_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a 0.043 0.200 2.348 0.019
d_agree_1 ~1 d_int_b 0.075 0.355 4.104 0.000
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.06 0.277 4.499 0
d_agree_1 ~1 d_int 0.06 0.283 4.499 0
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 6346.891 6474.915 0.988 0.047 0.036

Similar change in agreeableness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_current, fit_lcs_consc_main_weak_current, fit_lcs_consc_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_current 24 6865.2 7002.4 43.058                   
fit_lcs_consc_main_weak_current   26 6865.4 6993.4 47.284     4.3031       2
fit_lcs_consc_main_strong_current 30 6859.0 6968.8 48.905     1.6322       4
                                  Pr(>Chisq)
fit_lcs_consc_main_config_current           
fit_lcs_consc_main_weak_current       0.1163
fit_lcs_consc_main_strong_current     0.8030
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_current <- broom::tidy(fit_lcs_consc_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.157 0.435 6.271 0
d_consc_1 ~1 d_int_b 0.121 0.345 4.992 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.138 0.383 7.89 0
d_consc_1 ~1 d_int 0.138 0.393 7.89 0
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 6865.42 6993.444 0.994 0.048 0.028

Similar change in conscientiousness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_current, fit_lcs_neuro_main_weak_current, fit_lcs_neuro_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_current 24 7741.0 7878.2 30.316                   
fit_lcs_neuro_main_weak_current   26 7738.3 7866.3 31.583     1.3185       2
fit_lcs_neuro_main_strong_current 30 7732.3 7842.0 33.627     2.0392       4
                                  Pr(>Chisq)
fit_lcs_neuro_main_config_current           
fit_lcs_neuro_main_weak_current       0.5172
fit_lcs_neuro_main_strong_current     0.7286
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a -0.185 -0.408 -6.126 0
d_neuro_1 ~1 d_int_b -0.208 -0.430 -6.763 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.196 -0.434 -9.103 0
d_neuro_1 ~1 d_int -0.196 -0.406 -9.103 0
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 7738.267 7866.291 0.998 0.025 0.023

Similar change in neuroticism in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_current, fit_lcs_openn_main_weak_current, fit_lcs_openn_main_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                  Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_current 24 6939.0 7076.2 33.624                   
fit_lcs_openn_main_weak_current   26 6938.7 7066.8 37.379     3.1544       2
fit_lcs_openn_main_strong_current 30 6932.1 7041.9 38.777     1.3972       4
                                  Pr(>Chisq)
fit_lcs_openn_main_config_current           
fit_lcs_openn_main_weak_current       0.2066
fit_lcs_openn_main_strong_current     0.8447
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_current <- broom::tidy(fit_lcs_openn_main_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a 0.070 0.246 3.288 0.001
d_openn_1 ~1 d_int_b 0.063 0.301 3.308 0.001
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.068 0.237 4.734 0
d_openn_1 ~1 d_int 0.068 0.325 4.734 0
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 6938.74 7066.764 0.995 0.035 0.038

Almost no change in current personality openness in the self-improvement group but significant increase in self-acceptance group. Significant between-group difference in means according to the LRT (at p < .05).

7.1.3.3 Ideal personality personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_main_config_ideal, fit_lcs_extra_main_weak_ideal, fit_lcs_extra_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_main_config_ideal 24 6564.7 6701.9 37.286                   
fit_lcs_extra_main_weak_ideal   26 6561.0 6689.0 37.579     0.2714       2
fit_lcs_extra_main_strong_ideal 30 6556.9 6666.6 41.447     3.8635       4
                                Pr(>Chisq)
fit_lcs_extra_main_config_ideal           
fit_lcs_extra_main_weak_ideal       0.8731
fit_lcs_extra_main_strong_ideal     0.4248
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_extra_1 ~1 d_int_a -0.037 -0.098 -1.297 0.195
d_extra_1 ~1 d_int_b -0.028 -0.095 -1.087 0.277
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.032 -0.083 -1.64 0.101
d_extra_1 ~1 d_int -0.032 -0.106 -1.64 0.101
# model fit
kable(broom::glance(fit_lcs_extra_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 6561 6689.024 0.99 0.035 0.031

Increase in ideal personality extraversion is significantly higher in the self-acceptance group (n.s. in the self-improvement group).

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_main_config_ideal, fit_lcs_agree_main_weak_ideal, fit_lcs_agree_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_main_config_ideal 24 6463.0 6600.1 23.251                   
fit_lcs_agree_main_weak_ideal   26 6460.5 6588.5 24.761     1.2897       2
fit_lcs_agree_main_strong_ideal 30 6456.5 6566.2 28.783     4.0571       4
                                Pr(>Chisq)
fit_lcs_agree_main_config_ideal           
fit_lcs_agree_main_weak_ideal       0.5247
fit_lcs_agree_main_strong_ideal     0.3983
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_agree_1 ~1 d_int_a -0.011 -0.037 -0.506 0.613
d_agree_1 ~1 d_int_b 0.033 0.115 1.618 0.106
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.012 0.040 0.823 0.41
d_agree_1 ~1 d_int 0.012 0.042 0.823 0.41
# model fit
kable(broom::glance(fit_lcs_agree_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 6460.477 6588.501 1 0 0.029

Similar change in agreeableness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_main_config_ideal, fit_lcs_consc_main_weak_ideal, fit_lcs_consc_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_main_config_ideal 24 5537.1 5674.2 34.915                   
fit_lcs_consc_main_weak_ideal   26 5535.2 5663.2 37.032     1.5333       2
fit_lcs_consc_main_strong_ideal 30 5529.5 5639.3 39.367     2.2937       4
                                Pr(>Chisq)
fit_lcs_consc_main_config_ideal           
fit_lcs_consc_main_weak_ideal       0.4646
fit_lcs_consc_main_strong_ideal     0.6819
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_consc_1 ~1 d_int_a 0.018 0.052 0.727 0.468
d_consc_1 ~1 d_int_b 0.025 0.072 1.017 0.309
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.021 0.063 1.222 0.222
d_consc_1 ~1 d_int 0.021 0.062 1.222 0.222
# model fit
kable(broom::glance(fit_lcs_consc_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 5535.197 5663.221 0.993 0.034 0.041

Similar change in conscientiousness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_main_config_ideal, fit_lcs_neuro_main_weak_ideal, fit_lcs_neuro_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC  BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_main_config_ideal 24 5779.9 5917 46.031                   
fit_lcs_neuro_main_weak_ideal   26 5777.0 5905 47.162     1.0171       2
fit_lcs_neuro_main_strong_ideal 30 5774.3 5884 52.456     5.3578       4
                                Pr(>Chisq)
fit_lcs_neuro_main_config_ideal           
fit_lcs_neuro_main_weak_ideal       0.6014
fit_lcs_neuro_main_strong_ideal     0.2525
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_neuro_1 ~1 d_int_a 0.011 0.036 0.474 0.636
d_neuro_1 ~1 d_int_b -0.042 -0.126 -1.841 0.066
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.017 -0.053 -1.026 0.305
d_neuro_1 ~1 d_int -0.017 -0.050 -1.026 0.305
# model fit
kable(broom::glance(fit_lcs_neuro_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 5777.001 5905.025 0.986 0.048 0.042

Very similar change in neuroticism in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_main_config_ideal, fit_lcs_openn_main_weak_ideal, fit_lcs_openn_main_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_main_config_ideal 24 6662.5 6799.7 36.707                   
fit_lcs_openn_main_weak_ideal   26 6659.5 6787.5 37.690     0.9424       2
fit_lcs_openn_main_strong_ideal 30 6656.0 6765.8 42.271     4.5614       4
                                Pr(>Chisq)
fit_lcs_openn_main_config_ideal           
fit_lcs_openn_main_weak_ideal       0.6243
fit_lcs_openn_main_strong_ideal     0.3353
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_main_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_main_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")) %>% mutate(sig_diff = " ")
kable(params_main_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value sig_diff
d_openn_1 ~1 d_int_a -0.013 -0.055 -0.659 0.510
d_openn_1 ~1 d_int_b 0.004 0.016 0.200 0.842
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_main_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int -0.005 -0.021 -0.359 0.719
d_openn_1 ~1 d_int -0.005 -0.020 -0.359 0.719
# model fit
kable(broom::glance(fit_lcs_openn_main_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 6659.469 6787.493 0.991 0.035 0.036

Similar change in ideal personality openness in both groups (increase is slightly larger in self-improvement group). No significant differences according to the LRTs.

7.1.3.4 Summary of latent main effects
params_main_summary <- bind_rows(
  params_main_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff),
  params_main_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value, sig_diff)
) %>% mutate(group = ifelse(group=="d_int_a", "accept", "improve"))

kable(params_main_summary, digits = 3)
trait self group beta p.value sig_diff
extraversion current accept 0.452 0.000
extraversion current improve 0.377 0.000
extraversion ideal accept -0.098 0.195
extraversion ideal improve -0.095 0.277
agreeableness current accept 0.200 0.019
agreeableness current improve 0.355 0.000
agreeableness ideal accept -0.037 0.613
agreeableness ideal improve 0.115 0.106
conscientiousness current accept 0.435 0.000
conscientiousness current improve 0.345 0.000
conscientiousness ideal accept 0.052 0.468
conscientiousness ideal improve 0.072 0.309
neuroticism current accept -0.408 0.000
neuroticism current improve -0.430 0.000
neuroticism ideal accept 0.036 0.636
neuroticism ideal improve -0.126 0.066
openness current accept 0.246 0.001
openness current improve 0.301 0.001
openness ideal accept -0.055 0.510
openness ideal improve 0.016 0.842

7.2 Personal project dimensions (b)

We will explore b) whether the extent of change/acceptance is related to personal project dimension variables.

For now, I use the personal project dimension variables assessed at T1:

  • Self-improvement group: “How important is it for you to change your personality?”
  • Self-improvement group: “How difficult is it for you to work on changing your personality?”
  • Self-acceptance group: “How important is it for you to accept your personality?”
  • Self-acceptance group: “How difficult is it for you to work on accepting your personality?”

They were, however, also assessed at T2:

  • Self-improvement group: “During this study, how important was it for you to change your personality?”
  • Self-improvement group: “During this study, how difficult was it for you to work on changing your personality?”
  • Self-acceptance group: “During this study, how important was it for you to accept your personality?”
  • Self-acceptance group: “During this study, how difficult was it for you to work on accepting your personality?”

7.2.1 Personal project dimensions as moderators of change in personality in self-improvement group

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sb_ppd <- df_sbsa %>% 
  filter(rando=="Self-Improvement") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sb01"))) %>% # Personal project dimensions - self improvement
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sb01")))) %>% 
  select(-c(sb01_01_t2, sb01_02_t2))
# standardize personal project variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers_sb_ppd %>% 
  mutate_at(c(colnames(df_sbsa_wide_pers_sb_ppd)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa_wide_pers_sb_ppd)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Improvement") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sb_ppd)

# need to form a mean score because some models did not converge when using the latent factor of PPD (but moderate to high correlation between the two items)
df_sbsa_wide_pers_sb_ppd <- df_sbsa_wide_pers_sb_ppd %>% mutate(ppd = rowMeans(across(c(sb01_01_t1, sb01_02_t1)), na.rm=T))
7.2.1.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific change goals

trait_template_ppd_improve <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_trait_1 ~ ppd            # This estimates the moderation effect on the change score

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  # items = paste0(bfi_versions[[5]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_ppd_improve, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), trait_model_fit))
}  
7.2.1.1.1 Extraversion: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_extra_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4623.645 4697.899 0.995 0.033 0.031
# parameters of interest
params_lcs_extra_curr_ppd <- broom::tidy(fit_mi_lcs_extra_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ ppd", "ppd ~~ ppd", "extra_t1 ~ ppd", # change ppd
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.003 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.610 NA NA
d_extra_1 ~1 0.134 0.086 0.181 0.381 5.510 0.000
extra_t1 ~1 2.755 2.685 2.825 4.770 77.330 0.000
d_extra_1 ~~ d_extra_1 0.116 0.072 0.160 0.942 5.156 0.000
extra_t1 ~~ d_extra_1 -0.050 -0.080 -0.020 -0.263 -3.276 0.001
extra_t1 ~ ppd -0.173 -0.250 -0.095 -0.254 -4.376 0.000
d_extra_1 ~ ppd 0.100 0.036 0.163 0.242 3.087 0.002
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.464 0.000

Personal project dimensions significantly moderate changes in extraversion (current personality), b = 0.1, p = 0.002.

7.2.1.1.2 Agreeableness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_agree_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4107.767 4182.021 0.982 0.052 0.039
# parameters of interest
params_lcs_agree_curr_ppd <- broom::tidy(fit_mi_lcs_agree_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ ppd", "ppd ~~ ppd", "agree_t1 ~ ppd", # change ppd
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 1.061 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.540 NA NA
d_agree_1 ~1 0.077 0.039 0.114 0.357 3.972 0.000
agree_t1 ~1 3.356 3.296 3.417 7.949 108.172 0.000
d_agree_1 ~~ d_agree_1 0.046 0.023 0.070 1.000 3.834 0.000
agree_t1 ~~ d_agree_1 -0.033 -0.051 -0.016 -0.366 -3.697 0.000
agree_t1 ~ ppd -0.037 -0.102 0.028 -0.075 -1.113 0.266
d_agree_1 ~ ppd -0.002 -0.043 0.040 -0.007 -0.086 0.932
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.452 0.000

The moderation effect of personal project dimensions with the agreeableness change score (current personality) is not significantly different from zero, b = -0.002, p = 0.932.

7.2.1.1.3 Conscientiousness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_consc_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4320.096 4394.349 0.998 0.025 0.024
# parameters of interest
params_lcs_consc_curr_ppd <- broom::tidy(fit_mi_lcs_consc_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ ppd", "ppd ~~ ppd", "consc_t1 ~ ppd", # change ppd
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.037 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.507 NA NA
d_consc_1 ~1 0.124 0.075 0.172 0.342 4.966 0.000
consc_t1 ~1 3.553 3.471 3.634 4.801 85.471 0.000
d_consc_1 ~~ d_consc_1 0.130 0.086 0.174 0.996 5.768 0.000
consc_t1 ~~ d_consc_1 -0.080 -0.122 -0.039 -0.312 -3.819 0.000
consc_t1 ~ ppd -0.220 -0.310 -0.129 -0.253 -4.747 0.000
d_consc_1 ~ ppd 0.026 -0.027 0.078 0.061 0.956 0.339
ppd ~~ ppd 0.725 0.627 0.824 1.000 14.439 0.000

The moderation effect of personal project dimensions with the conscientiousness change score (current personality) is not significantly different from zero, b = 0.026, p = 0.339.

7.2.1.1.4 Neuroticism: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4776.966 4851.219 0.996 0.036 0.023
# parameters of interest
params_lcs_neuro_curr_ppd <- broom::tidy(fit_mi_lcs_neuro_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ ppd", "ppd ~~ ppd", "neuro_t1 ~ ppd", # change ppd
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 1.029 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.629 NA NA
d_neuro_1 ~1 -0.211 -0.272 -0.150 -0.430 -6.803 0.000
neuro_t1 ~1 3.492 3.404 3.580 4.345 77.696 0.000
d_neuro_1 ~~ d_neuro_1 0.235 0.164 0.306 0.973 6.508 0.000
neuro_t1 ~~ d_neuro_1 -0.117 -0.169 -0.066 -0.318 -4.473 0.000
neuro_t1 ~ ppd 0.308 0.205 0.412 0.326 5.826 0.000
d_neuro_1 ~ ppd -0.095 -0.163 -0.026 -0.164 -2.718 0.007
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.466 0.000

The moderation effect of personal project dimensions with the neuroticism change score (current personality) is not significantly different from zero, b = -0.095, p = 0.007.

7.2.1.1.5 Openness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_openn_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 19 4427.542 4501.796 0.99 0.044 0.024
# parameters of interest
params_lcs_openn_curr_ppd <- broom::tidy(fit_mi_lcs_openn_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ ppd", "ppd ~~ ppd", "openn_t1 ~ ppd", # change ppd
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.913 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.410 NA NA
d_openn_1 ~1 0.057 0.021 0.093 0.292 3.133 0.002
openn_t1 ~1 3.435 3.367 3.503 7.899 98.471 0.000
d_openn_1 ~~ d_openn_1 0.038 0.018 0.059 1.000 3.621 0.000
openn_t1 ~~ d_openn_1 0.000 -0.016 0.015 -0.002 -0.027 0.979
openn_t1 ~ ppd -0.010 -0.069 0.050 -0.019 -0.316 0.752
d_openn_1 ~ ppd -0.003 -0.043 0.037 -0.013 -0.149 0.881
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.459 0.000

The moderation effect of personal project dimensions with the openness change score (current personality) is not significantly different from zero, b = -0.003, p = 0.881.

7.2.1.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

facet_template_ppd_improve <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1       # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
facet_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_facet_1 ~ ppd            # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[5]], item_nrs)
  template_filled <- str_replace_all(facet_template_ppd_improve, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sb_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[5], 6), "_ppd")), facet_model_fit))
}  
7.2.1.2.1 Sociability - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_socia_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8575.276 8665.161 0.945 0.078 0.047
# parameters of interest
params_lcs_socia_curr_ppd <- broom::tidy(fit_mi_lcs_socia_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ ppd", "ppd ~~ ppd", "d_socia_1 ~ ppd", # change goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.028 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.647 NA NA
d_socia_1 ~1 0.181 0.095 0.267 0.341 4.110 0.000
socia_t1 ~1 2.805 2.682 2.928 3.333 44.630 0.000
d_socia_1 ~~ d_socia_1 0.271 0.162 0.380 0.968 4.876 0.000
socia_t1 ~~ d_socia_1 -0.151 -0.232 -0.070 -0.347 -3.645 0.000
d_socia_1 ~ ppd 0.110 0.004 0.216 0.177 2.043 0.041
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.461 0.000

The moderation effect of personal project dimensions with the sociability change score (current personality) is not significantly different from zero, b = 0.11, p = 0.041.

7.2.1.2.2 Assertiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_asser_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8880.228 8970.114 0.999 0.011 0.036
# parameters of interest
params_lcs_asser_curr_ppd <- broom::tidy(fit_mi_lcs_asser_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ ppd", "ppd ~~ ppd", "d_asser_1 ~ ppd", # change goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 0.994 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.423 NA NA
d_asser_1 ~1 0.056 0.004 0.108 0.230 2.094 0.036
asser_t1 ~1 3.059 2.958 3.160 5.353 59.569 0.000
d_asser_1 ~~ d_asser_1 0.055 0.007 0.103 0.921 2.226 0.026
asser_t1 ~~ d_asser_1 -0.019 -0.054 0.016 -0.147 -1.065 0.287
d_asser_1 ~ ppd 0.080 0.014 0.146 0.281 2.378 0.017
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.456 0.000

Personal project dimensions significantly moderate changes in assertiveness (current personality), b = 0.08, p = 0.017.

7.2.1.2.3 Energy - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_energ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8848.258 8938.144 0.971 0.048 0.038
# parameters of interest
params_lcs_energ_curr_ppd <- broom::tidy(fit_mi_lcs_energ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ ppd", "ppd ~~ ppd", "d_energ_1 ~ ppd", # change goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 0.996 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.553 NA NA
d_energ_1 ~1 0.093 0.048 0.139 0.419 3.996 0.000
energ_t1 ~1 3.290 3.192 3.388 8.209 65.778 0.000
d_energ_1 ~~ d_energ_1 0.048 0.011 0.085 0.972 2.524 0.012
energ_t1 ~~ d_energ_1 -0.019 -0.039 0.001 -0.230 -1.835 0.067
d_energ_1 ~ ppd 0.044 -0.003 0.091 0.167 1.816 0.069
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.460 0.000

The moderation effect of personal project dimensions with the energy change score (current personality) is not significantly different from zero, b = 0.044, p = 0.069.

7.2.1.2.4 Compassion - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_compa_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8593.153 8683.039 0.98 0.034 0.041
# parameters of interest
params_lcs_compa_curr_ppd <- broom::tidy(fit_mi_lcs_compa_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ ppd", "ppd ~~ ppd", "d_compa_1 ~ ppd", # change goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.139 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.403 NA NA
d_compa_1 ~1 0.104 0.037 0.171 0.412 3.044 0.002
compa_t1 ~1 4.149 4.058 4.239 5.792 89.602 0.000
d_compa_1 ~~ d_compa_1 0.062 -0.015 0.140 0.971 1.574 0.115
compa_t1 ~~ d_compa_1 -0.090 -0.166 -0.013 -0.503 -2.303 0.021
d_compa_1 ~ ppd 0.050 -0.027 0.128 0.169 1.275 0.202
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.459 0.000

The moderation effect of personal project dimensions with the compassion change score (current personality) is not significantly different from zero, b = 0.05, p = 0.202.

7.2.1.2.5 Respectfulness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respe_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 7849.966 7939.851 0.935 0.072 0.058
# parameters of interest
params_lcs_respe_curr_ppd <- broom::tidy(fit_mi_lcs_respe_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ ppd", "ppd ~~ ppd", "d_respe_1 ~ ppd", # change goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 1.127 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.631 NA NA
d_respe_1 ~1 0.065 0.011 0.120 0.200 2.341 0.019
respe_t1 ~1 4.398 4.321 4.475 7.540 111.900 0.000
d_respe_1 ~~ d_respe_1 0.106 0.052 0.161 0.997 3.832 0.000
respe_t1 ~~ d_respe_1 -0.090 -0.149 -0.032 -0.476 -3.030 0.002
d_respe_1 ~ ppd -0.022 -0.082 0.039 -0.056 -0.699 0.484
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.459 0.000

The moderation effect of personal project dimensions with the respectfulness change score (current personality) is not significantly different from zero, b = -0.022, p = 0.484.

7.2.1.2.6 Trust - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_trust_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8960.348 9050.234 0.956 0.055 0.043
# parameters of interest
params_lcs_trust_curr_ppd <- broom::tidy(fit_mi_lcs_trust_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ ppd", "ppd ~~ ppd", "d_trust_1 ~ ppd", # change goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 1.026 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.559 NA NA
d_trust_1 ~1 0.111 0.040 0.182 0.343 3.080 0.002
trust_t1 ~1 3.124 3.012 3.236 5.235 54.657 0.000
d_trust_1 ~~ d_trust_1 0.106 0.014 0.197 1.000 2.261 0.024
trust_t1 ~~ d_trust_1 -0.062 -0.123 -0.001 -0.318 -1.979 0.048
d_trust_1 ~ ppd -0.006 -0.077 0.064 -0.016 -0.174 0.862
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.460 0.000

The moderation effect of personal project dimensions with the trust change score (current personality) is not significantly different from zero, b = -0.006, p = 0.862.

7.2.1.2.7 Organization - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_organ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8504.942 8594.828 0.977 0.055 0.034
# parameters of interest
params_lcs_organ_curr_ppd <- broom::tidy(fit_mi_lcs_organ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ ppd", "ppd ~~ ppd", "d_organ_1 ~ ppd", # change goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.077 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.542 NA NA
d_organ_1 ~1 0.139 0.060 0.217 0.267 3.465 0.001
organ_t1 ~1 3.136 3.002 3.269 3.035 46.152 0.000
d_organ_1 ~~ d_organ_1 0.265 0.148 0.381 0.980 4.449 0.000
organ_t1 ~~ d_organ_1 -0.195 -0.289 -0.100 -0.373 -4.028 0.000
d_organ_1 ~ ppd 0.087 0.000 0.174 0.142 1.956 0.050
ppd ~~ ppd 0.725 0.627 0.824 1.000 14.453 0.000

The moderation effect of personal project dimensions with the organization change score (current personality) is not significantly different from zero, b = 0.087, p = 0.05.

7.2.1.2.8 Productiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_produ_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8426.523 8516.409 0.976 0.049 0.037
# parameters of interest
params_lcs_produ_curr_ppd <- broom::tidy(fit_mi_lcs_produ_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ ppd", "ppd ~~ ppd", "d_produ_1 ~ ppd", # change goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.049 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.512 NA NA
d_produ_1 ~1 0.153 0.086 0.220 0.407 4.467 0.000
produ_t1 ~1 2.623 2.505 2.741 3.414 43.537 0.000
d_produ_1 ~~ d_produ_1 0.139 0.070 0.208 0.989 3.951 0.000
produ_t1 ~~ d_produ_1 -0.088 -0.149 -0.028 -0.323 -2.862 0.004
d_produ_1 ~ ppd 0.047 -0.029 0.123 0.106 1.202 0.229
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.460 0.000

The moderation effect of personal project dimensions with the productiveness change score (current personality) is not significantly different from zero, b = 0.047, p = 0.229.

7.2.1.2.9 Responsibility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respo_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8567.606 8657.492 0.913 0.083 0.081
# parameters of interest
params_lcs_respo_curr_ppd <- broom::tidy(fit_mi_lcs_respo_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ ppd", "ppd ~~ ppd", "d_respo_1 ~ ppd", # change goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 0.986 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.465 NA NA
d_respo_1 ~1 0.043 -0.003 0.089 0.205 1.820 0.069
respo_t1 ~1 3.623 3.528 3.719 8.169 74.611 0.000
d_respo_1 ~~ d_respo_1 0.043 0.004 0.081 0.973 2.150 0.032
respo_t1 ~~ d_respo_1 -0.022 -0.048 0.003 -0.247 -1.703 0.089
d_respo_1 ~ ppd -0.040 -0.089 0.009 -0.163 -1.587 0.112
ppd ~~ ppd 0.725 0.627 0.824 1.000 14.431 0.000

Personal project dimensions significantly moderate changes in responsibility (current personality), b = -0.04, p = 0.112.

7.2.1.2.10 Anxiety - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8892.284 8982.17 0.983 0.038 0.039
# parameters of interest
params_lcs_anxie_curr_ppd <- broom::tidy(fit_mi_lcs_anxie_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ ppd", "ppd ~~ ppd", "d_anxie_1 ~ ppd", # change goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 1.075 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.680 NA NA
d_anxie_1 ~1 -0.219 -0.310 -0.128 -0.377 -4.716 0.000
anxie_t1 ~1 3.160 3.037 3.282 3.442 50.383 0.000
d_anxie_1 ~~ d_anxie_1 0.325 0.152 0.499 0.966 3.668 0.000
anxie_t1 ~~ d_anxie_1 -0.198 -0.311 -0.085 -0.394 -3.439 0.001
d_anxie_1 ~ ppd -0.125 -0.223 -0.027 -0.184 -2.505 0.012
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.464 0.000

The moderation effect of personal project dimensions with the anxiety change score (current personality) is not significantly different from zero, b = -0.125, p = 0.012.

7.2.1.2.11 Depression - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_depre_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8747.421 8837.307 0.949 0.08 0.057
# parameters of interest
params_lcs_depre_curr_ppd <- broom::tidy(fit_mi_lcs_depre_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ ppd", "ppd ~~ ppd", "d_depre_1 ~ ppd", # change goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 0.975 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.573 NA NA
d_depre_1 ~1 -0.152 -0.214 -0.090 -0.413 -4.818 0.000
depre_t1 ~1 3.039 2.929 3.148 4.847 54.341 0.000
d_depre_1 ~~ d_depre_1 0.132 0.072 0.192 0.974 4.328 0.000
depre_t1 ~~ d_depre_1 -0.044 -0.079 -0.010 -0.208 -2.543 0.011
d_depre_1 ~ ppd -0.070 -0.129 -0.011 -0.162 -2.341 0.019
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.467 0.000

The moderation effect of personal project dimensions with the depression change score (current personality) is not significantly different from zero, b = -0.07, p = 0.019.

7.2.1.2.12 Volatility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_volat_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8878.367 8968.253 0.984 0.042 0.031
# parameters of interest
params_lcs_volat_curr_ppd <- broom::tidy(fit_mi_lcs_volat_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ ppd", "ppd ~~ ppd", "d_volat_1 ~ ppd", # change goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 1.058 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.629 NA NA
d_volat_1 ~1 -0.174 -0.251 -0.098 -0.335 -4.451 0.000
volat_t1 ~1 3.229 3.110 3.348 3.689 53.289 0.000
d_volat_1 ~~ d_volat_1 0.269 0.179 0.359 0.990 5.850 0.000
volat_t1 ~~ d_volat_1 -0.164 -0.232 -0.096 -0.375 -4.722 0.000
d_volat_1 ~ ppd -0.061 -0.153 0.031 -0.100 -1.303 0.193
ppd ~~ ppd 0.724 0.626 0.822 1.000 14.462 0.000

The moderation effect of personal project dimensions with the volatility change score (current personality) is not significantly different from zero, b = -0.061, p = 0.193.

7.2.1.2.13 Curiosity - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_curio_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8655.58 8745.466 0.975 0.04 0.047
# parameters of interest
params_lcs_curio_curr_ppd <- broom::tidy(fit_mi_lcs_curio_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ ppd", "ppd ~~ ppd", "d_curio_1 ~ ppd", # change goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 0.991 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.411 NA NA
d_curio_1 ~1 0.063 0.012 0.115 0.325 2.414 0.016
curio_t1 ~1 4.062 3.970 4.154 8.636 86.602 0.000
d_curio_1 ~~ d_curio_1 0.038 -0.009 0.084 0.995 1.593 0.111
curio_t1 ~~ d_curio_1 -0.017 -0.047 0.014 -0.182 -1.070 0.285
d_curio_1 ~ ppd -0.017 -0.076 0.043 -0.073 -0.554 0.580
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.459 0.000

The moderation effect of personal project dimensions with the curiosity change score (current personality) is not significantly different from zero, b = -0.017, p = 0.58.

7.2.1.2.14 Aesthetic - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):
(here there were some convergence problems with the standard model that the loop tried to fit)

mi_lcs_aesth_curr_ppd <- '
aesth_t1 =~ 1*bf05_05_t1 + lamb2*bf05_20_t1 + lamb3*bf05_35_t1 + lamb4*bf05_50_t1 # This specifies the measurement model for aesth at T1
aesth_t2 =~ 1*bf05_05_t2 + lamb2*bf05_20_t2 + lamb3*bf05_35_t2 + lamb4*bf05_50_t2 # This specifies the measurement model for aesth at T2 (with equality constraints)

aesth_t2 ~ 1*aesth_t1     # This parameter regresses aesth_t2 perfectly on aesth_t1
d_aesth_1 =~ 1*aesth_t2   # This defines the latent change score factor as measured perfectly by scores on aesth_t2
aesth_t2 ~ 0*1            # This line constrains the intercept of aesth_t2 to 0
aesth_t2 ~~ 0*aesth_t2    # This fixes the variance of aesth_t2 to 0

d_aesth_1 ~ 1              # This estimates the intercept of the change score 
aesth_t1 ~ 1               # This estimates the intercept of aesth_t1 
d_aesth_1 ~~ d_aesth_1     # This estimates the variance of the change scores 
aesth_t1 ~~ aesth_t1       # This estimates the variance of aesth_t1 
aesth_t1 ~~ d_aesth_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
aesth_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_aesth_1 ~ ppd            # This estimates the moderation effect on the change score

bf05_05_t1 ~~ bf05_05_t2   # This allows residual covariance on indicator X1 across T1 and T2
bf05_20_t1 ~~ bf05_20_t2   # This allows residual covariance on indicator X2 across T1 and T2
bf05_35_t1 ~~ bf05_35_t2   # This allows residual covariance on indicator X3 across T1 and T2
bf05_50_t1 ~~ bf05_50_t2   # This allows residual covariance on indicator X4 across T1 and T2

bf05_05_t1 ~~ res1*bf05_05_t1   # This allows residual variance on indicator X1 at T1 
bf05_20_t1 ~~ res2*bf05_20_t1   # This allows residual variance on indicator X2 at T1
bf05_35_t1 ~~ res3*bf05_35_t1   # This allows residual variance on indicator X3 at T1
bf05_50_t1 ~~ res4*bf05_50_t1   # This allows residual variance on indicator X4 at T1

bf05_05_t2 ~~ res1*bf05_05_t2  # This allows residual variance on indicator X1 at T2 
bf05_20_t2 ~~ res2*bf05_20_t2  # This allows residual variance on indicator X2 at T2 
bf05_35_t2 ~~ res3*bf05_35_t2  # This allows residual variance on indicator X3 at T2
bf05_50_t2 ~~ res4*bf05_50_t2  # This allows residual variance on indicator X4 at T2

bf05_05_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
bf05_20_t1 ~ m2*1     # This estimates the intercept of X2 at T1
bf05_35_t1 ~ m3*1     # This estimates the intercept of X3 at T1
bf05_50_t1 ~ m4*1     # This estimates the intercept of X4 at T1

bf05_05_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
bf05_20_t2 ~ m2*1     # This estimates the intercept of X2 at T2
bf05_35_t2 ~ m3*1     # This estimates the intercept of X3 at T2
bf05_50_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

fit_mi_lcs_aesth_curr_ppd <- lavaan(mi_lcs_aesth_curr_ppd, 
                                            data=df_sbsa_wide_pers_sb_ppd %>% filter(!is.na(bf05_05_t1) & !is.na(bf05_05_t2)), 
                                            estimator='mlr', fixed.x=FALSE, missing="fiml")
# This model did not converge properly with missing data and FIML -> no problem when only using complete data
summary(fit_mi_lcs_aesth_curr_ppd, fit.measures=TRUE, standardized=TRUE, rsquare=F)
lavaan 0.6.15 ended normally after 195 iterations

  Estimator                                         ML
  Optimization method                           NLMINB
  Number of model parameters                        33
  Number of equality constraints                    10

  Number of observations                           331
  Number of missing patterns                         2

Model Test User Model:
                                              Standard      Scaled
  Test Statistic                                31.681      29.049
  Degrees of freedom                                31          31
  P-value (Chi-square)                           0.432       0.567
  Scaling correction factor                                  1.091
    Yuan-Bentler correction (Mplus variant)                       

Model Test Baseline Model:

  Test statistic                              1054.852     820.529
  Degrees of freedom                                36          36
  P-value                                        0.000       0.000
  Scaling correction factor                                  1.286

User Model versus Baseline Model:

  Comparative Fit Index (CFI)                    0.999       1.000
  Tucker-Lewis Index (TLI)                       0.999       1.003
                                                                  
  Robust Comparative Fit Index (CFI)                         1.000
  Robust Tucker-Lewis Index (TLI)                            1.003

Loglikelihood and Information Criteria:

  Loglikelihood user model (H0)              -4172.453   -4172.453
  Scaling correction factor                                  0.857
      for the MLR correction                                      
  Loglikelihood unrestricted model (H1)      -4156.612   -4156.612
  Scaling correction factor                                  1.150
      for the MLR correction                                      
                                                                  
  Akaike (AIC)                                8390.906    8390.906
  Bayesian (BIC)                              8478.354    8478.354
  Sample-size adjusted Bayesian (SABIC)       8405.398    8405.398

Root Mean Square Error of Approximation:

  RMSEA                                          0.008       0.000
  90 Percent confidence interval - lower         0.000       0.000
  90 Percent confidence interval - upper         0.042       0.037
  P-value H_0: RMSEA <= 0.050                    0.987       0.996
  P-value H_0: RMSEA >= 0.080                    0.000       0.000
                                                                  
  Robust RMSEA                                               0.000
  90 Percent confidence interval - lower                     0.000
  90 Percent confidence interval - upper                     0.039
  P-value H_0: Robust RMSEA <= 0.050                         0.992
  P-value H_0: Robust RMSEA >= 0.080                         0.000

Standardized Root Mean Square Residual:

  SRMR                                           0.033       0.033

Parameter Estimates:

  Standard errors                             Sandwich
  Information bread                           Observed
  Observed information based on                Hessian

Latent Variables:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t1 =~                                                           
    b05_05_           1.000                               0.042    0.032
    b05_20_ (lmb2)  -22.155    1.130  -19.599    0.000   -0.927   -0.835
    b05_35_ (lmb3)  -20.425    1.056  -19.341    0.000   -0.855   -0.800
    b05_50_ (lmb4)  -16.836    1.279  -13.160    0.000   -0.704   -0.517
  aesth_t2 =~                                                           
    b05_05_           1.000                               0.043    0.032
    b05_20_ (lmb2)  -22.155    1.130  -19.599    0.000   -0.951   -0.842
    b05_35_ (lmb3)  -20.425    1.056  -19.341    0.000   -0.876   -0.808
    b05_50_ (lmb4)  -16.836    1.279  -13.160    0.000   -0.722   -0.527
  d_aesth_1 =~                                                          
    asth_t2           1.000                               0.584    0.584

Regressions:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
  aesth_t2 ~                                                            
    aesth_t1          1.000                               0.975    0.975
  aesth_t1 ~                                                            
    ppd              -0.003    0.003   -1.193    0.233   -0.083   -0.071
  d_aesth_1 ~                                                           
    ppd               0.003    0.002    1.260    0.208    0.125    0.107

Covariances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
 .aesth_t1 ~~                                                           
   .d_aesth_1        -0.000    0.000   -2.599    0.009   -0.251   -0.251
 .bf05_05_t1 ~~                                                         
   .bf05_05_t2        0.550    0.106    5.212    0.000    0.550    0.316
 .bf05_20_t1 ~~                                                         
   .bf05_20_t2        0.103    0.070    1.475    0.140    0.103    0.278
 .bf05_35_t1 ~~                                                         
   .bf05_35_t2        0.111    0.061    1.829    0.067    0.111    0.272
 .bf05_50_t1 ~~                                                         
   .bf05_50_t2        0.821    0.098    8.356    0.000    0.821    0.604

Intercepts:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .aesth_t2          0.000                               0.000    0.000
   .d_aesth_1        -0.002    0.002   -0.922    0.357   -0.069   -0.069
   .aesth_t1          3.022    0.059   51.443    0.000   72.233   72.233
   .bf05_05_1         0.000                               0.000    0.000
   .bf05_20_1 (m2)   70.782    3.205   22.083    0.000   70.782   63.795
   .bf05_35_1 (m3)   65.565    3.120   21.015    0.000   65.565   61.420
   .bf05_50_1 (m4)   54.312    3.661   14.836    0.000   54.312   39.871
   .bf05_05_2         0.000                               0.000    0.000
   .bf05_20_2 (m2)   70.782    3.205   22.083    0.000   70.782   62.670
   .bf05_35_2 (m3)   65.565    3.120   21.015    0.000   65.565   60.423
   .bf05_50_2 (m4)   54.312    3.661   14.836    0.000   54.312   39.598
    ppd               0.002    0.047    0.052    0.959    0.002    0.003

Variances:
                   Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
   .asth_t2           0.000                               0.000    0.000
   .d_sth_1           0.001    0.000    3.872    0.000    0.989    0.989
   .asth_t1           0.002    0.000    9.572    0.000    0.995    0.995
   .b05_05_ (res1)    1.742    0.070   24.769    0.000    1.742    0.999
   .b05_20_ (res2)    0.372    0.077    4.844    0.000    0.372    0.302
   .b05_35_ (res3)    0.409    0.059    6.968    0.000    0.409    0.359
   .b05_50_ (res4)    1.359    0.099   13.768    0.000    1.359    0.733
   .b05_05_ (res1)    1.742    0.070   24.769    0.000    1.742    0.999
   .b05_20_ (res2)    0.372    0.077    4.844    0.000    0.372    0.292
   .b05_35_ (res3)    0.409    0.059    6.968    0.000    0.409    0.348
   .b05_50_ (res4)    1.359    0.099   13.768    0.000    1.359    0.723
    ppd               0.731    0.051   14.472    0.000    0.731    1.000
# model fit
kable(broom::glance(fit_mi_lcs_aesth_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
331 23 8390.906 8478.354 0.999 0.008 0.033
# parameters of interest
params_lcs_aesth_curr_ppd <- broom::tidy(fit_mi_lcs_aesth_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ ppd", "ppd ~~ ppd", "d_aesth_1 ~ ppd", # change goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.975 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.584 NA NA
d_aesth_1 ~1 -0.002 -0.005 0.002 -0.069 -0.922 0.357
aesth_t1 ~1 3.022 2.907 3.137 72.233 51.443 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 0.989 3.872 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.251 -2.599 0.009
d_aesth_1 ~ ppd 0.003 -0.002 0.008 0.107 1.260 0.208
ppd ~~ ppd 0.731 0.632 0.830 1.000 14.472 0.000

The moderation effect of personal project dimensions with the aesthetic change score (current personality) is not significantly different from zero, b = 0.003, p = 0.208.

7.2.1.2.15 Imagination - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_curr_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
368 23 8454.962 8544.848 0.957 0.061 0.059
# parameters of interest
params_lcs_imagi_curr_ppd <- broom::tidy(fit_mi_lcs_imagi_curr_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ ppd", "ppd ~~ ppd", "d_imagi_1 ~ ppd", # change goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_curr_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.969 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.473 NA NA
d_imagi_1 ~1 0.099 0.035 0.164 0.280 3.008 0.003
imagi_t1 ~1 3.567 3.470 3.664 4.918 72.336 0.000
d_imagi_1 ~~ d_imagi_1 0.124 0.042 0.206 0.990 2.951 0.003
imagi_t1 ~~ d_imagi_1 -0.042 -0.109 0.024 -0.167 -1.247 0.213
d_imagi_1 ~ ppd 0.041 -0.031 0.114 0.100 1.115 0.265
ppd ~~ ppd 0.724 0.626 0.823 1.000 14.457 0.000

The moderation effect of personal project dimensions with the imagination change score (current personality) is not significantly different from zero, b = 0.041, p = 0.265.

7.2.1.3 Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_ppd_improve <- bind_rows(
  #traits
  params_lcs_extra_curr_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_curr_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_curr_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_curr_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_curr_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_curr_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_curr_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_curr_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_curr_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_curr_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_curr_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_curr_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_curr_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_curr_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_curr_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_curr_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_curr_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_curr_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_curr_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_curr_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_improve[1:5, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion ppd 0.100 0.242 3.087 0.002
agreeableness ppd -0.002 -0.007 -0.086 0.932
conscientiousness ppd 0.026 0.061 0.956 0.339
neuroticism ppd -0.095 -0.164 -2.718 0.007
openness ppd -0.003 -0.013 -0.149 0.881

Two moderator effects significantly differs from zero:

  • changes in current-level extraversion are moderated by the personal project dimensions
  • changes in current-level neuroticism are moderated by the personal project dimensions

Results summary across the Big Five facets: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_improve[6:20, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability ppd 0.110 0.177 2.043 0.041
assertiveness ppd 0.080 0.281 2.378 0.017
energy ppd 0.044 0.167 1.816 0.069
compassion ppd 0.050 0.169 1.275 0.202
respectfulness ppd -0.022 -0.056 -0.699 0.484
trust ppd -0.006 -0.016 -0.174 0.862
organization ppd 0.087 0.142 1.956 0.050
productiveness ppd 0.047 0.106 1.202 0.229
responsibility ppd -0.040 -0.163 -1.587 0.112
anxiety ppd -0.125 -0.184 -2.505 0.012
depression ppd -0.070 -0.162 -2.341 0.019
volatility ppd -0.061 -0.100 -1.303 0.193
curiosity ppd -0.017 -0.073 -0.554 0.580
aesthetic ppd 0.003 0.107 1.260 0.208
imagination ppd 0.041 0.100 1.115 0.265

Four significant moderation effects of personal project dimensions on the facet-level:
- for extraversion the moderation effects by the personal project dimensions ar also reflected in the facets sociability and assertiveness (current-level)
- for neuroticism the moderation effects by the personal project dimensions ar also reflected in the facets anxiety and depression (current-level)

7.2.2 Personal project dimensions as moderators of change in personality in self-acceptance group

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_sa_ppd <- df_sbsa %>% 
  filter(rando=="Self-Acceptance") %>% 
  arrange(pid, time) %>% 
  select(pid, time, starts_with(c("sa01"))) %>% 
  pivot_wider(names_from = time,
              names_sep = "_t",
              values_from = c(starts_with(c("sa01")))) %>% 
  select(-c(sa01_01_t2, sa01_02_t2)) 
# standardize personal project variables (better interpretation for when they are in SEM as a single manifest variable, not so much a problem when they form a latent scale)
df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers_sa_ppd %>% 
  mutate_at(c(colnames(df_sbsa_wide_pers_sa_ppd)[-1]), ~(scale(.) %>% as.vector)) 
# colnames(df_sbsa_wide_pers_sa_ppd)

group_assign <- df_sbsa %>% select(pid, rando) %>% unique()

df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers %>% left_join(group_assign) %>% filter(rando=="Self-Acceptance") %>% select(-rando) %>%
  left_join(df_sbsa_wide_pers_sa_ppd)

# need to form a mean score because some models did not converge when using the latent factor of PPD (but high correlation between the two items)
df_sbsa_wide_pers_sa_ppd <- df_sbsa_wide_pers_sa_ppd %>% mutate(ppd = rowMeans(across(c(sa01_01_t1, sa01_02_t1)), na.rm=T))
7.2.2.1 Big Five traits

Run models for all traits with a template & loop:

Show the code
# create templates

trait_template_ppd_accept <- '
trait_t1 =~ 1*ind01_t1 + lamb2*ind02_t1 + lamb3*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 + lamb2*ind02_t2 + lamb3*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ 1              # This estimates the intercept of the change score 
trait_t1 ~ 1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ trait_t1       # This estimates the variance of trait_t1 
trait_t1 ~~ d_trait_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_trait_1 ~ ppd            # This estimates the moderation effect on the change score

ind01_t1 ~~ ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ res1*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ res2*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ res3*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ res1*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ res2*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ res3*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ m3*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ m3*1     # This estimates the intercept of X3 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post ideal (6 = ideal)
  # items = paste0(bfi_versions[[6]], item_nrs) # using parcels instead!
  template_filled <- str_replace_all(trait_template_ppd_accept, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), trait_model_fit))
}  
7.2.2.1.1 Extraversion: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_extra_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3910.411 3983.548 0.986 0.036 0.036
# parameters of interest
params_lcs_extra_ideal_ppd <- broom::tidy(fit_mi_lcs_extra_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("extra_t2 ~ extra_t1", "d_extra_1 =~ extra_t2", "extra_t1 ~~ d_extra_1", # change parameters
                           "d_extra_1 ~ ppd", "ppd ~~ ppd", "extra_t1 ~ ppd", # acceptance ppd
                           "d_extra_1 ~1 ", "extra_t1 ~1 ", "", # means
                           "d_extra_1 ~~ d_extra_1"))
kable(params_lcs_extra_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
extra_t2 ~ extra_t1 1.000 1.000 1.000 1.070 NA NA
d_extra_1 =~ extra_t2 1.000 1.000 1.000 0.902 NA NA
d_extra_1 ~1 -0.038 -0.096 0.021 -0.096 -1.269 0.204
extra_t1 ~1 3.713 3.652 3.775 7.953 118.423 0.000
d_extra_1 ~~ d_extra_1 0.154 0.084 0.224 0.995 4.316 0.000
extra_t1 ~~ d_extra_1 -0.091 -0.138 -0.043 -0.496 -3.725 0.000
extra_t1 ~ ppd -0.025 -0.106 0.057 -0.040 -0.596 0.551
d_extra_1 ~ ppd 0.036 -0.042 0.114 0.068 0.895 0.371
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.532 0.000

The moderation effect of personal project dimensions with the extraversion change score (ideal personality) is not significantly different from zero, b = 0.036, p = 0.371.

7.2.2.1.2 Agreeableness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_agree_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3916.928 3990.066 1 0 0.031
# parameters of interest
params_lcs_agree_ideal_ppd <- broom::tidy(fit_mi_lcs_agree_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("agree_t2 ~ agree_t1", "d_agree_1 =~ agree_t2", "agree_t1 ~~ d_agree_1", # change parameters
                           "d_agree_1 ~ ppd", "ppd ~~ ppd", "agree_t1 ~ ppd", # acceptance ppd
                           "d_agree_1 ~1 ", "agree_t1 ~1 ", "", # means
                           "d_agree_1 ~~ d_agree_1"))
kable(params_lcs_agree_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
agree_t2 ~ agree_t1 1.000 1.000 1.000 0.986 NA NA
d_agree_1 =~ agree_t2 1.000 1.000 1.000 0.672 NA NA
d_agree_1 ~1 -0.012 -0.058 0.033 -0.039 -0.539 0.590
agree_t1 ~1 3.705 3.632 3.779 7.953 98.743 0.000
d_agree_1 ~~ d_agree_1 0.101 0.061 0.141 0.999 4.956 0.000
agree_t1 ~~ d_agree_1 -0.048 -0.077 -0.018 -0.328 -3.181 0.001
agree_t1 ~ ppd 0.103 0.018 0.188 0.166 2.385 0.017
d_agree_1 ~ ppd 0.010 -0.051 0.070 0.023 0.317 0.751
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.532 0.000

The moderation effect of personal project dimensions with the agreeableness change score (ideal personality) is not significantly different from zero, b = 0.01, p = 0.751.

7.2.2.1.3 Conscientiousness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_consc_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3519.974 3593.111 0.99 0.038 0.039
# parameters of interest
params_lcs_consc_ideal_ppd <- broom::tidy(fit_mi_lcs_consc_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("consc_t2 ~ consc_t1", "d_consc_1 =~ consc_t2", "consc_t1 ~~ d_consc_1", # change parameters
                           "d_consc_1 ~ ppd", "ppd ~~ ppd", "consc_t1 ~ ppd", # acceptance ppd
                           "d_consc_1 ~1 ", "consc_t1 ~1 ", "", # means
                           "d_consc_1 ~~ d_consc_1"))
kable(params_lcs_consc_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
consc_t2 ~ consc_t1 1.000 1.000 1.000 1.046 NA NA
d_consc_1 =~ consc_t2 1.000 1.000 1.000 0.739 NA NA
d_consc_1 ~1 0.018 -0.031 0.067 0.051 0.724 0.469
consc_t1 ~1 4.377 4.320 4.434 8.866 150.311 0.000
d_consc_1 ~~ d_consc_1 0.120 0.059 0.180 0.982 3.847 0.000
consc_t1 ~~ d_consc_1 -0.068 -0.129 -0.007 -0.401 -2.170 0.030
consc_t1 ~ ppd 0.107 0.035 0.180 0.162 2.892 0.004
d_consc_1 ~ ppd -0.062 -0.123 -0.002 -0.133 -2.021 0.043
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.532 0.000

The moderation effect of personal project dimensions with the conscientiousness change score (ideal personality) is not significantly different from zero, b = -0.062, p = 0.043.

7.2.2.1.4 Neuroticism: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_neuro_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3614.071 3687.208 0.972 0.055 0.05
# parameters of interest
params_lcs_neuro_ideal_ppd <- broom::tidy(fit_mi_lcs_neuro_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("neuro_t2 ~ neuro_t1", "d_neuro_1 =~ neuro_t2", "neuro_t1 ~~ d_neuro_1", # change parameters
                           "d_neuro_1 ~ ppd", "ppd ~~ ppd", "neuro_t1 ~ ppd", # acceptance ppd
                           "d_neuro_1 ~1 ", "neuro_t1 ~1 ", "", # means
                           "d_neuro_1 ~~ d_neuro_1"))
kable(params_lcs_neuro_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
neuro_t2 ~ neuro_t1 1.000 1.000 1.000 0.938 NA NA
d_neuro_1 =~ neuro_t2 1.000 1.000 1.000 0.780 NA NA
d_neuro_1 ~1 0.011 -0.037 0.059 0.034 0.445 0.656
neuro_t1 ~1 1.646 1.595 1.697 4.222 63.168 0.000
d_neuro_1 ~~ d_neuro_1 0.105 0.055 0.155 1.000 4.141 0.000
neuro_t1 ~~ d_neuro_1 -0.042 -0.071 -0.013 -0.333 -2.864 0.004
neuro_t1 ~ ppd -0.033 -0.100 0.034 -0.063 -0.966 0.334
d_neuro_1 ~ ppd 0.006 -0.056 0.068 0.015 0.199 0.842
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.532 0.000

The moderation effect of personal project dimensions with the neuroticism change score (ideal personality) is not significantly different from zero, b = 0.006, p = 0.842.

7.2.2.1.5 Openness: personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_openn_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 19 3917.053 3990.19 0.98 0.049 0.037
# parameters of interest
params_lcs_openn_ideal_ppd <- broom::tidy(fit_mi_lcs_openn_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
        filter(term %in% c("openn_t2 ~ openn_t1", "d_openn_1 =~ openn_t2", "openn_t1 ~~ d_openn_1", # change parameters
                           "d_openn_1 ~ ppd", "ppd ~~ ppd", "openn_t1 ~ ppd", # acceptance ppd
                           "d_openn_1 ~1 ", "openn_t1 ~1 ", "", # means
                           "d_openn_1 ~~ d_openn_1"))
kable(params_lcs_openn_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
openn_t2 ~ openn_t1 1.000 1.000 1.000 0.967 NA NA
d_openn_1 =~ openn_t2 1.000 1.000 1.000 0.638 NA NA
d_openn_1 ~1 -0.013 -0.053 0.026 -0.056 -0.658 0.510
openn_t1 ~1 3.811 3.752 3.870 10.663 126.676 0.000
d_openn_1 ~~ d_openn_1 0.056 0.028 0.083 1.000 4.010 0.000
openn_t1 ~~ d_openn_1 -0.023 -0.039 -0.007 -0.278 -2.843 0.004
openn_t1 ~ ppd 0.041 -0.012 0.094 0.086 1.529 0.126
d_openn_1 ~ ppd 0.000 -0.049 0.049 0.001 0.012 0.991
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the openness change score (ideal personality) is not significantly different from zero, b = 0, p = 0.991.

7.2.2.2 Big Five facets

Run models for all facets with a template & loop:

Show the code
# create templates:

# 1st, for facet-specific acceptance goal

facet_template_ppd_accept <- '
facet_t1 =~ 1*ind1_t1 + lamb2*ind2_t1 + lamb3*ind3_t1 + lamb4*ind4_t1 # This specifies the measurement model for facet at T1
facet_t2 =~ 1*ind1_t2 + lamb2*ind2_t2 + lamb3*ind3_t2 + lamb4*ind4_t2 # This specifies the measurement model for facet at T2 (with equality constraints)

facet_t2 ~ 1*facet_t1     # This parameter regresses facet_t2 perfectly on facet_t1
d_facet_1 =~ 1*facet_t2   # This defines the latent change score factor as measured perfectly by scores on facet_t2
facet_t2 ~ 0*1            # This line constrains the intercept of facet_t2 to 0
facet_t2 ~~ 0*facet_t2    # This fixes the variance of facet_t2 to 0

d_facet_1 ~ 1              # This estimates the intercept of the change score 
facet_t1 ~ 1               # This estimates the intercept of facet_t1 
d_facet_1 ~~ d_facet_1     # This estimates the variance of the change scores 
facet_t1 ~~ facet_t1         # This estimates the variance of facet_t1 
facet_t1 ~~ d_facet_1      # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
facet_t1 ~ ppd             # This estimates the moderation effect on personality at T1
d_facet_1 ~ ppd            # This estimates the moderation effect on the change score

ind1_t1 ~~ ind1_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind2_t1 ~~ ind2_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind3_t1 ~~ ind3_t2   # This allows residual covariance on indicator X3 across T1 and T2
ind4_t1 ~~ ind4_t2   # This allows residual covariance on indicator X4 across T1 and T2

ind1_t1 ~~ res1*ind1_t1   # This allows residual variance on indicator X1 at T1 
ind2_t1 ~~ res2*ind2_t1   # This allows residual variance on indicator X2 at T1
ind3_t1 ~~ res3*ind3_t1   # This allows residual variance on indicator X3 at T1
ind4_t1 ~~ res4*ind4_t1   # This allows residual variance on indicator X4 at T1

ind1_t2 ~~ res1*ind1_t2  # This allows residual variance on indicator X1 at T2 
ind2_t2 ~~ res2*ind2_t2  # This allows residual variance on indicator X2 at T2 
ind3_t2 ~~ res3*ind3_t2  # This allows residual variance on indicator X3 at T2
ind4_t2 ~~ res4*ind4_t2  # This allows residual variance on indicator X4 at T2

ind1_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind2_t1 ~ m2*1     # This estimates the intercept of X2 at T1
ind3_t1 ~ m3*1     # This estimates the intercept of X3 at T1
ind4_t1 ~ m4*1     # This estimates the intercept of X4 at T1

ind1_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind2_t2 ~ m2*1     # This estimates the intercept of X2 at T2
ind3_t2 ~ m3*1     # This estimates the intercept of X3 at T2
ind4_t2 ~ m4*1     # This estimates the intercept of X4 at T2

ppd ~~ ppd

ppd ~ 1
'

# loop across 15 facets
for (i in 6:length(b5_vars)) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # use BFI version combined pre&post current
  items = paste0(bfi_versions[[6]], item_nrs)
  template_filled <- str_replace_all(facet_template_ppd_accept, 
                                       c("facet" = short_name,
                                         "ind1" = items[1], "ind2" = items[2], "ind3" = items[3], "ind4" = items[4]))
  facet_model_fit <- lavaan(template_filled, data=df_sbsa_wide_pers_sa_ppd, estimator='mlr', fixed.x=FALSE, missing='fiml')
  eval(call("<-", as.name(paste0("mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), template_filled))
  eval(call("<-", as.name(paste0("fit_mi_lcs_", short_name, "_", 
                                     str_sub(names(bfi_versions)[6], 6), "_ppd")), facet_model_fit))
}  
7.2.2.2.1 Sociability - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_socia_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7912.351 8000.886 0.959 0.045 0.049
# parameters of interest
params_lcs_socia_ideal_ppd <- broom::tidy(fit_mi_lcs_socia_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("socia_t2 ~ socia_t1", "d_socia_1 =~ socia_t2", "socia_t1 ~~ d_socia_1", # change parameters
                     "d_socia_1 ~ ppd", "ppd ~~ ppd", "d_socia_1 ~ ppd", # acceptance goals
                     "d_socia_1 ~1 ", "socia_t1 ~1 ", "", # means
                     "d_socia_1 ~~ d_socia_1"))
kable(params_lcs_socia_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
socia_t2 ~ socia_t1 1.000 1.000 1.000 1.049 NA NA
d_socia_1 =~ socia_t2 1.000 1.000 1.000 0.747 NA NA
d_socia_1 ~1 -0.058 -0.106 -0.009 -0.229 -2.338 0.019
socia_t1 ~1 4.321 4.249 4.393 12.218 118.212 0.000
d_socia_1 ~~ d_socia_1 0.063 0.017 0.109 1.000 2.706 0.007
socia_t1 ~~ d_socia_1 -0.037 -0.063 -0.012 -0.421 -2.931 0.003
d_socia_1 ~ ppd -0.001 -0.066 0.064 -0.003 -0.032 0.974
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.528 0.000

The moderation effect of personal project dimensions with the sociability change score (ideal personality) is not significantly different from zero, b = -0.001, p = 0.974.

7.2.2.2.2 Assertiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_asser_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8170.504 8259.039 0.984 0.026 0.036
# parameters of interest
params_lcs_asser_ideal_ppd <- broom::tidy(fit_mi_lcs_asser_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("asser_t2 ~ asser_t1", "d_asser_1 =~ asser_t2", "asser_t1 ~~ d_asser_1", # change parameters
                     "d_asser_1 ~ ppd", "ppd ~~ ppd", "d_asser_1 ~ ppd", # acceptance goals
                     "d_asser_1 ~1 ", "asser_t1 ~1 ", "", # means
                     "d_asser_1 ~~ d_asser_1"))
kable(params_lcs_asser_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
asser_t2 ~ asser_t1 1.000 1.000 1.000 1.012 NA NA
d_asser_1 =~ asser_t2 1.000 1.000 1.000 0.748 NA NA
d_asser_1 ~1 -0.034 -0.070 0.003 -0.171 -1.814 0.070
asser_t1 ~1 4.163 4.072 4.254 15.582 89.735 0.000
d_asser_1 ~~ d_asser_1 0.039 0.001 0.076 0.991 2.029 0.042
asser_t1 ~~ d_asser_1 -0.020 -0.042 0.002 -0.381 -1.748 0.080
d_asser_1 ~ ppd 0.025 -0.025 0.076 0.096 0.994 0.320
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.531 0.000

The moderation effect of personal project dimensions with the assertiveness change score (ideal personality) is not significantly different from zero, b = 0.025, p = 0.32.

7.2.2.2.3 Energy - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_energ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7529.823 7618.357 0.911 0.05 0.06
# parameters of interest
params_lcs_energ_ideal_ppd <- broom::tidy(fit_mi_lcs_energ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("energ_t2 ~ energ_t1", "d_energ_1 =~ energ_t2", "energ_t1 ~~ d_energ_1", # change parameters
                     "d_energ_1 ~ ppd", "ppd ~~ ppd", "d_energ_1 ~ ppd", # acceptance goals
                     "d_energ_1 ~1 ", "energ_t1 ~1 ", "", # means
                     "d_energ_1 ~~ d_energ_1"))
kable(params_lcs_energ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
energ_t2 ~ energ_t1 1.000 1.000 1.000 1.104 NA NA
d_energ_1 =~ energ_t2 1.000 1.000 1.000 0.930 NA NA
d_energ_1 ~1 0.012 -0.033 0.057 0.051 0.520 0.603
energ_t1 ~1 3.608 3.492 3.724 12.967 60.969 0.000
d_energ_1 ~~ d_energ_1 0.055 -0.032 0.142 1.000 1.235 0.217
energ_t1 ~~ d_energ_1 -0.034 -0.096 0.027 -0.530 -1.095 0.273
d_energ_1 ~ ppd 0.003 -0.046 0.051 0.009 0.108 0.914
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the energy change score (ideal personality) is not significantly different from zero, b = 0.003, p = 0.914.

7.2.2.2.4 Compassion - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_compa_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8548.781 8637.315 1 0 0.035
# parameters of interest
params_lcs_compa_ideal_ppd <- broom::tidy(fit_mi_lcs_compa_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("compa_t2 ~ compa_t1", "d_compa_1 =~ compa_t2", "compa_t1 ~~ d_compa_1", # change parameters
                     "d_compa_1 ~ ppd", "ppd ~~ ppd", "d_compa_1 ~ ppd", # acceptance goals
                     "d_compa_1 ~1 ", "compa_t1 ~1 ", "", # means
                     "d_compa_1 ~~ d_compa_1"))
kable(params_lcs_compa_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
compa_t2 ~ compa_t1 1.000 1.000 1.000 1.014 NA NA
d_compa_1 =~ compa_t2 1.000 1.000 1.000 0.580 NA NA
d_compa_1 ~1 -0.041 -0.113 0.031 -0.121 -1.107 0.268
compa_t1 ~1 4.255 4.165 4.346 7.208 91.886 0.000
d_compa_1 ~~ d_compa_1 0.114 0.003 0.225 0.997 2.011 0.044
compa_t1 ~~ d_compa_1 -0.060 -0.131 0.011 -0.306 -1.650 0.099
d_compa_1 ~ ppd -0.023 -0.133 0.087 -0.051 -0.408 0.683
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.537 0.000

The moderation effect of personal project dimensions with the compassion change score (ideal personality) is not significantly different from zero, b = -0.023, p = 0.683.

7.2.2.2.5 Respectfulness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respe_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6825.887 6914.421 0.932 0.059 0.057
# parameters of interest
params_lcs_respe_ideal_ppd <- broom::tidy(fit_mi_lcs_respe_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respe_t2 ~ respe_t1", "d_respe_1 =~ respe_t2", "respe_t1 ~~ d_respe_1", # change parameters
                     "d_respe_1 ~ ppd", "ppd ~~ ppd", "d_respe_1 ~ ppd", # acceptance goals
                     "d_respe_1 ~1 ", "respe_t1 ~1 ", "", # means
                     "d_respe_1 ~~ d_respe_1"))
kable(params_lcs_respe_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respe_t2 ~ respe_t1 1.000 1.000 1.000 0.951 NA NA
d_respe_1 =~ respe_t2 1.000 1.000 1.000 0.661 NA NA
d_respe_1 ~1 0.006 -0.039 0.051 0.026 0.273 0.785
respe_t1 ~1 4.672 4.614 4.731 13.752 156.374 0.000
d_respe_1 ~~ d_respe_1 0.056 0.013 0.098 0.997 2.544 0.011
respe_t1 ~~ d_respe_1 -0.022 -0.054 0.009 -0.282 -1.383 0.167
d_respe_1 ~ ppd 0.017 -0.042 0.076 0.055 0.578 0.564
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.531 0.000

The moderation effect of personal project dimensions with the respectfulness change score (ideal personality) is not significantly different from zero, b = 0.017, p = 0.564.

7.2.2.2.6 Trust - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_trust_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8154.525 8243.059 0.952 0.049 0.043
# parameters of interest
params_lcs_trust_ideal_ppd <- broom::tidy(fit_mi_lcs_trust_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("trust_t2 ~ trust_t1", "d_trust_1 =~ trust_t2", "trust_t1 ~~ d_trust_1", # change parameters
                     "d_trust_1 ~ ppd", "ppd ~~ ppd", "d_trust_1 ~ ppd", # acceptance goals
                     "d_trust_1 ~1 ", "trust_t1 ~1 ", "", # means
                     "d_trust_1 ~~ d_trust_1"))
kable(params_lcs_trust_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
trust_t2 ~ trust_t1 1.000 1.000 1.000 0.984 NA NA
d_trust_1 =~ trust_t2 1.000 1.000 1.000 0.643 NA NA
d_trust_1 ~1 -0.030 -0.084 0.025 -0.104 -1.064 0.287
trust_t1 ~1 4.095 4.001 4.189 9.387 85.518 0.000
d_trust_1 ~~ d_trust_1 0.081 0.030 0.132 0.997 3.120 0.002
trust_t1 ~~ d_trust_1 -0.036 -0.072 -0.001 -0.297 -2.009 0.044
d_trust_1 ~ ppd -0.021 -0.094 0.053 -0.055 -0.557 0.578
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.528 0.000

The moderation effect of personal project dimensions with the trust change score (ideal personality) is not significantly different from zero, b = -0.021, p = 0.578.

7.2.2.2.7 Organization - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_organ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7025.744 7114.278 0.952 0.045 0.048
# parameters of interest
params_lcs_organ_ideal_ppd <- broom::tidy(fit_mi_lcs_organ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("organ_t2 ~ organ_t1", "d_organ_1 =~ organ_t2", "organ_t1 ~~ d_organ_1", # change parameters
                     "d_organ_1 ~ ppd", "ppd ~~ ppd", "d_organ_1 ~ ppd", # acceptance goals
                     "d_organ_1 ~1 ", "organ_t1 ~1 ", "", # means
                     "d_organ_1 ~~ d_organ_1"))
kable(params_lcs_organ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
organ_t2 ~ organ_t1 1.000 1.000 1.000 1.038 NA NA
d_organ_1 =~ organ_t2 1.000 1.000 1.000 0.827 NA NA
d_organ_1 ~1 -0.001 -0.032 0.030 -0.005 -0.060 0.952
organ_t1 ~1 4.304 4.215 4.393 17.158 94.469 0.000
d_organ_1 ~~ d_organ_1 0.039 0.002 0.077 0.985 2.070 0.038
organ_t1 ~~ d_organ_1 -0.021 -0.041 -0.002 -0.431 -2.119 0.034
d_organ_1 ~ ppd -0.033 -0.075 0.010 -0.121 -1.499 0.134
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the organization change score (ideal personality) is not significantly different from zero, b = -0.033, p = 0.134.

7.2.2.2.8 Productiveness - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_produ_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6533.8 6622.334 0.884 0.067 0.065
# parameters of interest
params_lcs_produ_ideal_ppd <- broom::tidy(fit_mi_lcs_produ_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("produ_t2 ~ produ_t1", "d_produ_1 =~ produ_t2", "produ_t1 ~~ d_produ_1", # change parameters
                     "d_produ_1 ~ ppd", "ppd ~~ ppd", "d_produ_1 ~ ppd", # acceptance goals
                     "d_produ_1 ~1 ", "produ_t1 ~1 ", "", # means
                     "d_produ_1 ~~ d_produ_1"))
kable(params_lcs_produ_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
produ_t2 ~ produ_t1 1.000 1.000 1.000 1.083 NA NA
d_produ_1 =~ produ_t2 1.000 1.000 1.000 0.740 NA NA
d_produ_1 ~1 0.027 -0.025 0.078 0.098 1.014 0.310
produ_t1 ~1 4.388 4.311 4.464 11.033 112.393 0.000
d_produ_1 ~~ d_produ_1 0.073 0.013 0.133 0.991 2.375 0.018
produ_t1 ~~ d_produ_1 -0.048 -0.097 0.002 -0.445 -1.899 0.058
d_produ_1 ~ ppd -0.035 -0.097 0.027 -0.096 -1.109 0.267
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.532 0.000

The moderation effect of personal project dimensions with the productiveness change score (ideal personality) is not significantly different from zero, b = -0.035, p = 0.267.

7.2.2.2.9 Responsibility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_respo_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7500.411 7588.945 0.985 0.026 0.042
# parameters of interest
params_lcs_respo_ideal_ppd <- broom::tidy(fit_mi_lcs_respo_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("respo_t2 ~ respo_t1", "d_respo_1 =~ respo_t2", "respo_t1 ~~ d_respo_1", # change parameters
                     "d_respo_1 ~ ppd", "ppd ~~ ppd", "d_respo_1 ~ ppd", # acceptance goals
                     "d_respo_1 ~1 ", "respo_t1 ~1 ", "", # means
                     "d_respo_1 ~~ d_respo_1"))
kable(params_lcs_respo_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
respo_t2 ~ respo_t1 1.000 1.000 1.000 1.055 NA NA
d_respo_1 =~ respo_t2 1.000 1.000 1.000 0.789 NA NA
d_respo_1 ~1 0.031 -0.033 0.095 0.082 0.940 0.347
respo_t1 ~1 4.275 4.175 4.375 8.473 83.940 0.000
d_respo_1 ~~ d_respo_1 0.140 0.035 0.245 0.985 2.621 0.009
respo_t1 ~~ d_respo_1 -0.081 -0.148 -0.013 -0.431 -2.338 0.019
d_respo_1 ~ ppd -0.061 -0.140 0.018 -0.121 -1.514 0.130
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.532 0.000

The moderation effect of personal project dimensions with the responsibility change score (ideal personality) is not significantly different from zero, b = -0.061, p = 0.13.

7.2.2.2.10 Anxiety - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_anxie_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8113.714 8202.249 0.893 0.048 0.049
# parameters of interest
params_lcs_anxie_ideal_ppd <- broom::tidy(fit_mi_lcs_anxie_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("anxie_t2 ~ anxie_t1", "d_anxie_1 =~ anxie_t2", "anxie_t1 ~~ d_anxie_1", # change parameters
                     "d_anxie_1 ~ ppd", "ppd ~~ ppd", "d_anxie_1 ~ ppd", # acceptance goals
                     "d_anxie_1 ~1 ", "anxie_t1 ~1 ", "", # means
                     "d_anxie_1 ~~ d_anxie_1"))
kable(params_lcs_anxie_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
anxie_t2 ~ anxie_t1 1.000 1.000 1.000 0.855 NA NA
d_anxie_1 =~ anxie_t2 1.000 1.000 1.000 0.768 NA NA
d_anxie_1 ~1 0.047 -0.012 0.105 0.177 1.563 0.118
anxie_t1 ~1 1.432 1.368 1.497 4.868 43.520 0.000
d_anxie_1 ~~ d_anxie_1 0.070 -0.047 0.186 0.997 1.176 0.240
anxie_t1 ~~ d_anxie_1 -0.019 -0.060 0.022 -0.241 -0.887 0.375
d_anxie_1 ~ ppd 0.018 -0.103 0.140 0.052 0.297 0.766
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.530 0.000

The moderation effect of personal project dimensions with the anxiety change score (ideal personality) is not significantly different from zero, b = 0.018, p = 0.766.

7.2.2.2.11 Depression - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_depre_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 6567.077 6655.611 0.819 0.085 0.074
# parameters of interest
params_lcs_depre_ideal_ppd <- broom::tidy(fit_mi_lcs_depre_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("depre_t2 ~ depre_t1", "d_depre_1 =~ depre_t2", "depre_t1 ~~ d_depre_1", # change parameters
                     "d_depre_1 ~ ppd", "ppd ~~ ppd", "d_depre_1 ~ ppd", # acceptance goals
                     "d_depre_1 ~1 ", "depre_t1 ~1 ", "", # means
                     "d_depre_1 ~~ d_depre_1"))
kable(params_lcs_depre_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
depre_t2 ~ depre_t1 1.000 1.000 1.000 1.063 NA NA
d_depre_1 =~ depre_t2 1.000 1.000 1.000 0.812 NA NA
d_depre_1 ~1 -0.018 -0.054 0.018 -0.081 -0.968 0.333
depre_t1 ~1 1.591 1.526 1.655 5.447 48.185 0.000
d_depre_1 ~~ d_depre_1 0.050 0.003 0.096 0.999 2.100 0.036
depre_t1 ~~ d_depre_1 -0.030 -0.059 -0.001 -0.458 -2.021 0.043
d_depre_1 ~ ppd -0.009 -0.055 0.037 -0.031 -0.397 0.692
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the depression change score (ideal personality) is not significantly different from zero, b = -0.009, p = 0.692.

7.2.2.2.12 Volatility - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_volat_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7619.615 7708.149 0.954 0.039 0.047
# parameters of interest
params_lcs_volat_ideal_ppd <- broom::tidy(fit_mi_lcs_volat_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("volat_t2 ~ volat_t1", "d_volat_1 =~ volat_t2", "volat_t1 ~~ d_volat_1", # change parameters
                     "d_volat_1 ~ ppd", "ppd ~~ ppd", "d_volat_1 ~ ppd", # acceptance goals
                     "d_volat_1 ~1 ", "volat_t1 ~1 ", "", # means
                     "d_volat_1 ~~ d_volat_1"))
kable(params_lcs_volat_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
volat_t2 ~ volat_t1 1.000 1.000 1.000 0.914 NA NA
d_volat_1 =~ volat_t2 1.000 1.000 1.000 0.669 NA NA
d_volat_1 ~1 0.022 -0.040 0.084 0.070 0.706 0.480
volat_t1 ~1 1.703 1.622 1.784 3.941 41.195 0.000
d_volat_1 ~~ d_volat_1 0.100 0.021 0.179 0.999 2.477 0.013
volat_t1 ~~ d_volat_1 -0.032 -0.085 0.021 -0.232 -1.178 0.239
d_volat_1 ~ ppd -0.011 -0.097 0.074 -0.026 -0.256 0.798
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the volatility change score (ideal personality) is not significantly different from zero, b = -0.011, p = 0.798.

7.2.2.2.13 Curiosity - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_curio_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8058.239 8146.774 0.989 0.019 0.039
# parameters of interest
params_lcs_curio_ideal_ppd <- broom::tidy(fit_mi_lcs_curio_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("curio_t2 ~ curio_t1", "d_curio_1 =~ curio_t2", "curio_t1 ~~ d_curio_1", # change parameters
                     "d_curio_1 ~ ppd", "ppd ~~ ppd", "d_curio_1 ~ ppd", # acceptance goals
                     "d_curio_1 ~1 ", "curio_t1 ~1 ", "", # means
                     "d_curio_1 ~~ d_curio_1"))
kable(params_lcs_curio_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
curio_t2 ~ curio_t1 1.000 1.000 1.000 1.043 NA NA
d_curio_1 =~ curio_t2 1.000 1.000 1.000 0.683 NA NA
d_curio_1 ~1 0.013 -0.030 0.056 0.065 0.595 0.552
curio_t1 ~1 4.494 4.426 4.561 14.620 130.828 0.000
d_curio_1 ~~ d_curio_1 0.040 -0.008 0.088 0.992 1.650 0.099
curio_t1 ~~ d_curio_1 -0.024 -0.050 0.002 -0.393 -1.837 0.066
d_curio_1 ~ ppd 0.025 -0.038 0.088 0.092 0.767 0.443
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the curiosity change score (ideal personality) is not significantly different from zero, b = 0.025, p = 0.443.

7.2.2.2.14 Aesthetic - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_aesth_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 8106.145 8194.679 0.988 0.03 0.039
# parameters of interest
params_lcs_aesth_ideal_ppd <- broom::tidy(fit_mi_lcs_aesth_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("aesth_t2 ~ aesth_t1", "d_aesth_1 =~ aesth_t2", "aesth_t1 ~~ d_aesth_1", # change parameters
                     "d_aesth_1 ~ ppd", "ppd ~~ ppd", "d_aesth_1 ~ ppd", # acceptance goals
                     "d_aesth_1 ~1 ", "aesth_t1 ~1 ", "", # means
                     "d_aesth_1 ~~ d_aesth_1"))
kable(params_lcs_aesth_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
aesth_t2 ~ aesth_t1 1.000 1.000 1.000 0.947 NA NA
d_aesth_1 =~ aesth_t2 1.000 1.000 1.000 0.669 NA NA
d_aesth_1 ~1 0.001 -0.002 0.005 0.048 0.627 0.530
aesth_t1 ~1 2.792 2.663 2.920 81.197 42.523 0.000
d_aesth_1 ~~ d_aesth_1 0.001 0.000 0.001 1.000 4.321 0.000
aesth_t1 ~~ d_aesth_1 0.000 0.000 0.000 -0.277 -1.820 0.069
d_aesth_1 ~ ppd 0.000 -0.004 0.004 0.002 0.026 0.979
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.539 0.000

The moderation effect of personal project dimensions with the aesthetic change score (ideal personality) is not significantly different from zero, b = 0, p = 0.979.

7.2.2.2.15 Imagination - personal project dimensions as moderator of change

Results summary (ppd = personal project dimensions):

# model fit
kable(broom::glance(fit_mi_lcs_imagi_ideal_ppd) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
347 23 7456.052 7544.586 0.93 0.048 0.054
# parameters of interest
params_lcs_imagi_ideal_ppd <- broom::tidy(fit_mi_lcs_imagi_ideal_ppd, conf.int = TRUE, conf.level = 0.95) %>% 
  select(term, estimate, conf.low, conf.high, std.all, statistic, p.value) %>% 
  filter(term %in% c("imagi_t2 ~ imagi_t1", "d_imagi_1 =~ imagi_t2", "imagi_t1 ~~ d_imagi_1", # change parameters
                     "d_imagi_1 ~ ppd", "ppd ~~ ppd", "d_imagi_1 ~ ppd", # acceptance goals
                     "d_imagi_1 ~1 ", "imagi_t1 ~1 ", "", # means
                     "d_imagi_1 ~~ d_imagi_1"))
kable(params_lcs_imagi_ideal_ppd, digits = 3) 
term estimate conf.low conf.high std.all statistic p.value
imagi_t2 ~ imagi_t1 1.000 1.000 1.000 0.874 NA NA
d_imagi_1 =~ imagi_t2 1.000 1.000 1.000 0.549 NA NA
d_imagi_1 ~1 -0.044 -0.092 0.004 -0.210 -1.782 0.075
imagi_t1 ~1 4.604 4.544 4.663 13.939 151.716 0.000
d_imagi_1 ~~ d_imagi_1 0.042 0.000 0.084 0.969 1.950 0.051
imagi_t1 ~~ d_imagi_1 -0.004 -0.034 0.026 -0.057 -0.254 0.799
d_imagi_1 ~ ppd -0.049 -0.115 0.017 -0.176 -1.455 0.146
ppd ~~ ppd 0.557 0.470 0.644 1.000 12.533 0.000

The moderation effect of personal project dimensions with the imagination change score (ideal personality) is not significantly different from zero, b = -0.049, p = 0.146.

7.2.2.3 Effects summary

Run models for all facets with a template & loop:

Show the code
# create df for table:

df_table_ppd_accept <- bind_rows(
  #traits
  params_lcs_extra_ideal_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_ideal_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_ideal_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_ideal_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_ideal_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_ideal_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_ideal_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_ideal_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_ideal_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_ideal_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_ideal_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_ideal_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_ideal_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_ideal_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_ideal_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_ideal_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_ideal_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_ideal_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_ideal_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_ideal_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20)) %>% 
  select(trait, moderator, estimate, std.all, statistic, p.value)

Results summary across the Big Five traits: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_accept[1:5, ], digits = 3)
trait moderator estimate std.all statistic p.value
extraversion ppd 0.036 0.068 0.895 0.371
agreeableness ppd 0.010 0.023 0.317 0.751
conscientiousness ppd -0.062 -0.133 -2.021 0.043
neuroticism ppd 0.006 0.015 0.199 0.842
openness ppd 0.000 0.001 0.012 0.991

No moderator effect significantly differs from zero.

Results summary across the Big Five facets: personal project dimensions (ppd) as moderators on the latent change score

kable(df_table_ppd_accept[6:20, ], digits = 3)
trait moderator estimate std.all statistic p.value
sociability ppd -0.001 -0.003 -0.032 0.974
assertiveness ppd 0.025 0.096 0.994 0.320
energy ppd 0.003 0.009 0.108 0.914
compassion ppd -0.023 -0.051 -0.408 0.683
respectfulness ppd 0.017 0.055 0.578 0.564
trust ppd -0.021 -0.055 -0.557 0.578
organization ppd -0.033 -0.121 -1.499 0.134
productiveness ppd -0.035 -0.096 -1.109 0.267
responsibility ppd -0.061 -0.121 -1.514 0.130
anxiety ppd 0.018 0.052 0.297 0.766
depression ppd -0.009 -0.031 -0.397 0.692
volatility ppd -0.011 -0.026 -0.256 0.798
curiosity ppd 0.025 0.092 0.767 0.443
aesthetic ppd 0.000 0.002 0.026 0.979
imagination ppd -0.049 -0.176 -1.455 0.146

No moderator effect significantly differs from zero.

7.2.3 Plot

Prepare data frame for plotting:

Show the code
df_table_ppd_plot1 <- bind_rows(
  #traits
  params_lcs_extra_curr_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_curr_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_curr_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_curr_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_curr_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_curr_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_curr_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_curr_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_curr_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_curr_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_curr_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_curr_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_curr_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_curr_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_curr_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_curr_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_curr_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_curr_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_curr_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_curr_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20),
         ref = "self-improvement") %>% 
  select(trait, moderator, ref, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_ppd_plot2 <- bind_rows(
  #traits
  params_lcs_extra_ideal_ppd %>% filter(term=="d_extra_1 ~ ppd"),
  params_lcs_agree_ideal_ppd %>% filter(term=="d_agree_1 ~ ppd"),
  params_lcs_consc_ideal_ppd %>% filter(term=="d_consc_1 ~ ppd"),
  params_lcs_neuro_ideal_ppd %>% filter(term=="d_neuro_1 ~ ppd"),
  params_lcs_openn_ideal_ppd %>% filter(term=="d_openn_1 ~ ppd"),
  #facets
  params_lcs_socia_ideal_ppd %>% filter(term=="d_socia_1 ~ ppd"),
  params_lcs_asser_ideal_ppd %>% filter(term=="d_asser_1 ~ ppd"),
  params_lcs_energ_ideal_ppd %>% filter(term=="d_energ_1 ~ ppd"),
  params_lcs_compa_ideal_ppd %>% filter(term=="d_compa_1 ~ ppd"),
  params_lcs_respe_ideal_ppd %>% filter(term=="d_respe_1 ~ ppd"),
  params_lcs_trust_ideal_ppd %>% filter(term=="d_trust_1 ~ ppd"),
  params_lcs_organ_ideal_ppd %>% filter(term=="d_organ_1 ~ ppd"),
  params_lcs_produ_ideal_ppd %>% filter(term=="d_produ_1 ~ ppd"),
  params_lcs_respo_ideal_ppd %>% filter(term=="d_respo_1 ~ ppd"),
  params_lcs_anxie_ideal_ppd %>% filter(term=="d_anxie_1 ~ ppd"),
  params_lcs_depre_ideal_ppd %>% filter(term=="d_depre_1 ~ ppd"),
  params_lcs_volat_ideal_ppd %>% filter(term=="d_volat_1 ~ ppd"),
  params_lcs_curio_ideal_ppd %>% filter(term=="d_curio_1 ~ ppd"),
  params_lcs_aesth_ideal_ppd %>% filter(term=="d_aesth_1 ~ ppd"),
  params_lcs_imagi_ideal_ppd %>% filter(term=="d_imagi_1 ~ ppd")
  ) %>% 
  mutate(trait = names(b5_vars),
         moderator = rep(c("ppd"), 20),
         ref = "self-acceptance") %>% 
  select(trait, moderator, ref, estimate, conf.low, conf.high, std.all, statistic, p.value)

df_table_ppd_plot <- bind_rows(df_table_ppd_plot1, df_table_ppd_plot2)

df_table_ppd_plot <- df_table_ppd_plot %>% 
  mutate(include_0 = ifelse(conf.low < 0 & conf.high > 0, "n.s.", "*")) %>% 
  mutate(ref2 = factor(ref, levels = c("self-improvement", "self-acceptance"), labels = c("self-improvement", "self-acceptance"))) %>% 
  mutate(moderator = factor("personal project dimensions", levels = c("personal project dimensions"), labels = c("personal project dimensions"))) %>% 
  mutate(trait = factor(trait, levels = names(b5_vars), labels = names(b5_vars)))

Plotting the effect size across all analyses:

  • self-improvement = testing the effect of personal project dimensions as a moderator in the self-improvement group (on current-level trait change)
  • self-acceptance = testing the effect of personal project dimensions as a moderator in the self-acceptance group (on ideal-level trait change)
Show the code
ggplot(df_table_ppd_plot, aes(x = fct_rev(trait), y = estimate, color = include_0)) +
  geom_hline(yintercept=0, linetype = 3) +
  geom_point(size=3, position=position_dodge(0.4)) + 
  geom_errorbar(aes(ymin = conf.low, ymax = conf.high, color = include_0), width=.2, position=position_dodge(0.4)) +
  scale_color_manual(values = c("#000000","#A9A9A9")) +   
  facet_wrap( ~ moderator + fct_rev(ref), ncol = 2) +
  theme_bw() +
  scale_shape_manual(values=c(18)) + 
  ylab("Effect Estimates (95% CI)") +
  xlab("") +
  theme(legend.title=element_blank()) +
  theme(legend.text=element_text(size=12)) +
  coord_flip() +
  theme(strip.text.x = element_text(size = 12)) +
  theme(axis.text.x=element_text(size=10, angle = 45, hjust = 1), axis.text.y=element_text(size=12)) + 
  guides(color="none")

7.3 Traits that were selected as change goals (c)

We will explore c) whether there are stronger rates of change/acceptance on traits that were selected as change goals (in the 5 free-form adjectives) than those that were not.

TBD!

7.4 Robustness check (d)

Does self-improvement intervene on current personality trait change (but not ideal personality)? Does self-acceptance intervene on ideal personality trait change (but not current personality)?

Changes in current personality traits over time:

Show the code
df_manip_check_curr <- df_sbsa %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_curr")) %>% 
  pivot_longer(ends_with("_comb_curr"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_curr_unlist <- as.data.frame(summary(df_manip_check_curr[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_curr)) {
  df_manip_check_curr_unlist <- bind_rows(df_manip_check_curr_unlist, 
                                          as.data.frame(summary(df_manip_check_curr[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_curr_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, str_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, str_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est str_err p sig
extraversion Intercept 2.796 0.038 0.000 ***
extraversion time 0.166 0.026 0.000 ***
extraversion group 0.001 0.053 0.984
extraversion time*group -0.026 0.037 0.488
agreeableness Intercept 3.553 0.032 0.000 ***
agreeableness time 0.076 0.024 0.002 **
agreeableness group 0.016 0.045 0.724
agreeableness time*group 0.018 0.034 0.594
conscientiousness Intercept 3.328 0.041 0.000 ***
conscientiousness time 0.151 0.024 0.000 ***
conscientiousness group 0.056 0.058 0.333
conscientiousness time*group -0.037 0.034 0.282
neuroticism Intercept 3.306 0.045 0.000 ***
neuroticism time -0.192 0.031 0.000 ***
neuroticism group -0.023 0.063 0.717
neuroticism time*group -0.020 0.044 0.645
openness Intercept 3.654 0.033 0.000 ***
openness time 0.082 0.023 0.000 ***
openness group -0.048 0.046 0.293
openness time*group -0.003 0.032 0.934
sociability Intercept 2.469 0.051 0.000 ***
sociability time 0.191 0.036 0.000 ***
sociability group -0.023 0.072 0.753
sociability time*group -0.007 0.050 0.893
assertiveness Intercept 2.855 0.046 0.000 ***
assertiveness time 0.122 0.035 0.000 ***
assertiveness group 0.024 0.065 0.713
assertiveness time*group -0.044 0.048 0.365
energy Intercept 3.063 0.046 0.000 ***
energy time 0.188 0.039 0.000 ***
energy group 0.002 0.064 0.980
energy time*group -0.027 0.054 0.617
compassion Intercept 3.670 0.039 0.000 ***
compassion time 0.052 0.036 0.146
compassion group 0.031 0.055 0.567
compassion time*group 0.013 0.050 0.790
respectfulness Intercept 3.953 0.040 0.000 ***
respectfulness time 0.075 0.032 0.022 *
respectfulness group -0.029 0.056 0.603
respectfulness time*group 0.005 0.045 0.905
trust Intercept 3.035 0.044 0.000 ***
trust time 0.100 0.035 0.005 **
trust group 0.043 0.061 0.481
trust time*group 0.039 0.049 0.433
organization Intercept 3.431 0.054 0.000 ***
organization time 0.125 0.036 0.001 ***
organization group 0.061 0.076 0.419
organization time*group -0.005 0.050 0.924
productiveness Intercept 3.095 0.049 0.000 ***
productiveness time 0.197 0.033 0.000 ***
productiveness group 0.067 0.068 0.325
productiveness time*group -0.045 0.047 0.340
responsibility Intercept 3.456 0.042 0.000 ***
responsibility time 0.128 0.032 0.000 ***
responsibility group 0.041 0.059 0.487
responsibility time*group -0.056 0.045 0.206
anxiety Intercept 3.608 0.048 0.000 ***
anxiety time -0.147 0.039 0.000 ***
anxiety group -0.022 0.067 0.741
anxiety time*group -0.063 0.055 0.251
depression Intercept 3.221 0.054 0.000 ***
depression time -0.280 0.041 0.000 ***
depression group -0.030 0.076 0.691
depression time*group 0.035 0.057 0.535
volatility Intercept 3.088 0.054 0.000 ***
volatility time -0.147 0.042 0.000 ***
volatility group -0.015 0.075 0.837
volatility time*group -0.036 0.058 0.538
curiosity Intercept 3.771 0.040 0.000 ***
curiosity time 0.114 0.034 0.001 ***
curiosity group -0.036 0.056 0.527
curiosity time*group -0.038 0.047 0.425
aesthetic Intercept 3.574 0.044 0.000 ***
aesthetic time 0.045 0.034 0.192
aesthetic group -0.070 0.061 0.247
aesthetic time*group 0.017 0.048 0.730
imagination Intercept 3.618 0.043 0.000 ***
imagination time 0.089 0.033 0.008 **
imagination group -0.039 0.061 0.524
imagination time*group 0.011 0.047 0.817

No significant group effects (higher trait level in self-improvement group at baseline) and also no significant differences in the changes over time in current personality trait levels (timeXgroup). Significant changes over time in current personality trait levels (time) for most domains/facets (independent of intervention group membership).

Changes in ideal personality traits over time:

Show the code
df_manip_check_ideal <- df_sbsa %>% 
  select(pid, time_d, rando, 
         paste0(str_trunc(names(b5_vars), 5, ellipsis = ""), "_comb_ideal")) %>% 
  pivot_longer(ends_with("_comb_ideal"), 
               names_to = "test", names_prefix = "facet", values_to = "score", values_drop_na = TRUE) %>% 
  group_nest(test) %>% 
  mutate(lmer_mods = map(data, ~lmerTest::lmer(score ~ time_d * rando + (1 | pid), data = .x))) %>% 
  pull(lmer_mods) %>% 
  purrr::set_names(sort(names(b5_vars))) # ordered alphabetically

df_manip_check_ideal_unlist <- as.data.frame(summary(df_manip_check_ideal[[1]])$coefficients) %>% as_tibble()
for (i in 2:length(df_manip_check_ideal)) {
  df_manip_check_ideal_unlist <- bind_rows(df_manip_check_ideal_unlist, 
                                          as.data.frame(summary(df_manip_check_ideal[[i]])$coefficients) %>% as_tibble())
}
kable(df_manip_check_ideal_unlist %>% 
        mutate(outcome = rep(sort(names(b5_vars)), each=4), 
               term = c(rep(c("Intercept", "time", "group", "time*group"), 20))) %>% 
        rename(p = `Pr(>|t|)`, str_err = `Std. Error`, est = Estimate) %>% select(outcome, term, est, str_err, p) %>% 
        mutate(sig = ifelse(p < .05, ifelse(p < .01, ifelse(p < .001, "***", "**"), "*"), " ")) %>% 
        arrange(factor(outcome, levels = (names(b5_vars)))), # order by BFI traits, 
      digits = 3)
outcome term est str_err p sig
extraversion Intercept 3.921 0.027 0.000 ***
extraversion time -0.029 0.024 0.233
extraversion group -0.029 0.037 0.428
extraversion time*group 0.004 0.034 0.918
agreeableness Intercept 4.020 0.030 0.000 ***
agreeableness time -0.011 0.025 0.662
agreeableness group -0.001 0.042 0.980
agreeableness time*group 0.051 0.034 0.137
conscientiousness Intercept 4.392 0.026 0.000 ***
conscientiousness time 0.026 0.024 0.270
conscientiousness group -0.001 0.036 0.977
conscientiousness time*group -0.007 0.033 0.832
neuroticism Intercept 1.749 0.027 0.000 ***
neuroticism time 0.010 0.025 0.696
neuroticism group 0.019 0.037 0.602
neuroticism time*group -0.053 0.035 0.127
openness Intercept 4.104 0.029 0.000 ***
openness time 0.000 0.024 0.996
openness group -0.058 0.040 0.149
openness time*group 0.009 0.034 0.781
sociability Intercept 3.790 0.038 0.000 ***
sociability time -0.086 0.033 0.009 **
sociability group -0.071 0.053 0.178
sociability time*group 0.045 0.046 0.336
assertiveness Intercept 3.843 0.037 0.000 ***
assertiveness time -0.057 0.036 0.115
assertiveness group -0.026 0.051 0.605
assertiveness time*group 0.000 0.050 0.995
energy Intercept 4.130 0.034 0.000 ***
energy time 0.058 0.038 0.129
energy group 0.008 0.047 0.866
energy time*group -0.033 0.053 0.539
compassion Intercept 3.958 0.039 0.000 ***
compassion time -0.002 0.039 0.955
compassion group -0.024 0.054 0.656
compassion time*group 0.043 0.054 0.428
respectfulness Intercept 4.369 0.032 0.000 ***
respectfulness time 0.002 0.030 0.959
respectfulness group 0.004 0.045 0.930
respectfulness time*group 0.035 0.042 0.399
trust Intercept 3.733 0.039 0.000 ***
trust time -0.030 0.036 0.407
trust group 0.014 0.055 0.802
trust time*group 0.077 0.050 0.127
organization Intercept 4.408 0.031 0.000 ***
organization time 0.008 0.032 0.796
organization group -0.013 0.043 0.755
organization time*group 0.051 0.045 0.253
productiveness Intercept 4.514 0.030 0.000 ***
productiveness time 0.040 0.031 0.194
productiveness group -0.011 0.041 0.784
productiveness time*group -0.018 0.043 0.680
responsibility Intercept 4.255 0.034 0.000 ***
responsibility time 0.032 0.032 0.311
responsibility group 0.021 0.047 0.660
responsibility time*group -0.054 0.044 0.220
anxiety Intercept 1.942 0.035 0.000 ***
anxiety time 0.028 0.040 0.485
anxiety group 0.055 0.049 0.261
anxiety time*group -0.118 0.056 0.034 *
depression Intercept 1.528 0.029 0.000 ***
depression time -0.027 0.031 0.378
depression group 0.014 0.041 0.736
depression time*group -0.002 0.043 0.967
volatility Intercept 1.777 0.033 0.000 ***
volatility time 0.030 0.032 0.357
volatility group -0.010 0.046 0.826
volatility time*group -0.044 0.045 0.337
curiosity Intercept 4.092 0.036 0.000 ***
curiosity time 0.016 0.034 0.634
curiosity group -0.065 0.051 0.199
curiosity time*group -0.015 0.047 0.757
aesthetic Intercept 3.817 0.039 0.000 ***
aesthetic time 0.044 0.036 0.224
aesthetic group -0.011 0.054 0.834
aesthetic time*group -0.070 0.051 0.171
imagination Intercept 4.404 0.034 0.000 ***
imagination time -0.058 0.036 0.108
imagination group -0.096 0.048 0.044 *
imagination time*group 0.113 0.050 0.024 *

No significant group effects (higher trait level in self-improvement group at baseline; except for imagination facet) and also no significant differences in the changes over time in ideal personality trait levels (timeXgroup; except for imagination and anxiety facets). No significant changes over time in ideal personality trait levels (time) for most domains/facets (independent of intervention group membership) with the exception of sociability.

7.4.1 Descriptive plots: mean-level changes

7.4.1.1 Personality

Prepare data frame for plotting:

Show the code
df_manip_check_forplot <- df_sbsa %>% 
  mutate(time_d = time - 1) %>% 
  select(pid, time_d, rando, contains("_comb_"), -c(na_comb_curr, na_comb_ideal)) %>% 
  pivot_longer(-c(pid, time_d, rando), 
               cols_vary = "slowest",
               names_to = c("trait", "reference"),
               names_pattern = "(.*)_(.*)",
               values_to = "score") %>% 
  mutate(trait = gsub("_comb", "", trait),
         reference = ifelse(reference=="curr", "current", reference)) %>% 
  left_join(tibble(long = str_to_title(names(b5_vars)), trait = str_trunc(names(b5_vars), 5, ellipsis = ""))) %>% 
  select(-trait, trait = long, time = time_d) %>% 
  filter(!is.na(score)) %>% 
  group_by(trait, reference, rando, time) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup() %>% 
  mutate(Group = factor(rando, levels = c("Self-Improvement", "Self-Acceptance"), labels = c("Self-Improvement", "Self-Acceptance")),
         Time = factor(time+1),
         Trait = factor(trait, 
                        levels = str_to_title(names(b5_vars))[c(1,6:8, 2,9:11, 3,12:14, 4,15:17, 5,18:20)], # group facets with each trait
                        labels = str_to_title(names(b5_vars))[c(1,6:8, 2,9:11, 3,12:14, 4,15:17, 5,18:20)]),
         Reference = factor(reference, levels = c("current", "ideal"), labels = c("Current Personality", "Ideal Personality")),
         lwr95 = m_trait - qnorm(0.975)*sd_trait/sqrt(n),
         upr95 = m_trait + qnorm(0.975)*sd_trait/sqrt(n)) %>% 
  select(-c(time, rando, trait, reference))

Table of all outcomes:

Show the code
df_manip_check_forplot %>% arrange(Trait) %>% 
  mutate_if(is.numeric, round, digits=2) %>% 
  select(Trait, Reference, Group, Time, n, m_trait, lwr95, upr95, sd_trait) %>% 
  kable(digits = 2)
Trait Reference Group Time n m_trait lwr95 upr95 sd_trait
Extraversion Current Personality Self-Acceptance 1 342 2.80 2.72 2.87 0.74
Extraversion Current Personality Self-Acceptance 2 326 2.96 2.89 3.04 0.71
Extraversion Current Personality Self-Improvement 1 362 2.79 2.72 2.86 0.68
Extraversion Current Personality Self-Improvement 2 338 2.93 2.86 3.00 0.68
Extraversion Ideal Personality Self-Acceptance 1 342 3.92 3.87 3.97 0.48
Extraversion Ideal Personality Self-Acceptance 2 326 3.89 3.84 3.94 0.45
Extraversion Ideal Personality Self-Improvement 1 362 3.89 3.84 3.94 0.50
Extraversion Ideal Personality Self-Improvement 2 338 3.87 3.81 3.92 0.53
Sociability Current Personality Self-Acceptance 1 342 2.47 2.37 2.58 1.00
Sociability Current Personality Self-Acceptance 2 326 2.66 2.55 2.76 0.96
Sociability Current Personality Self-Improvement 1 362 2.43 2.34 2.53 0.94
Sociability Current Personality Self-Improvement 2 338 2.60 2.51 2.70 0.91
Sociability Ideal Personality Self-Acceptance 1 342 3.79 3.72 3.87 0.70
Sociability Ideal Personality Self-Acceptance 2 326 3.70 3.63 3.77 0.68
Sociability Ideal Personality Self-Improvement 1 362 3.72 3.65 3.79 0.70
Sociability Ideal Personality Self-Improvement 2 338 3.67 3.59 3.75 0.72
Assertiveness Current Personality Self-Acceptance 1 342 2.85 2.75 2.94 0.89
Assertiveness Current Personality Self-Acceptance 2 326 2.98 2.88 3.07 0.87
Assertiveness Current Personality Self-Improvement 1 362 2.88 2.79 2.96 0.84
Assertiveness Current Personality Self-Improvement 2 338 2.95 2.86 3.04 0.84
Assertiveness Ideal Personality Self-Acceptance 1 342 3.84 3.77 3.91 0.69
Assertiveness Ideal Personality Self-Acceptance 2 326 3.79 3.72 3.86 0.67
Assertiveness Ideal Personality Self-Improvement 1 362 3.82 3.75 3.88 0.66
Assertiveness Ideal Personality Self-Improvement 2 338 3.76 3.69 3.84 0.70
Energy Current Personality Self-Acceptance 1 342 3.06 2.97 3.16 0.87
Energy Current Personality Self-Acceptance 2 326 3.26 3.16 3.35 0.87
Energy Current Personality Self-Improvement 1 362 3.06 2.97 3.14 0.84
Energy Current Personality Self-Improvement 2 338 3.23 3.14 3.32 0.84
Energy Ideal Personality Self-Acceptance 1 342 4.13 4.06 4.20 0.63
Energy Ideal Personality Self-Acceptance 2 326 4.19 4.13 4.25 0.58
Energy Ideal Personality Self-Improvement 1 362 4.14 4.07 4.20 0.65
Energy Ideal Personality Self-Improvement 2 338 4.16 4.10 4.23 0.65
Agreeableness Current Personality Self-Acceptance 1 342 3.55 3.49 3.62 0.62
Agreeableness Current Personality Self-Acceptance 2 326 3.63 3.56 3.69 0.60
Agreeableness Current Personality Self-Improvement 1 362 3.56 3.50 3.62 0.60
Agreeableness Current Personality Self-Improvement 2 338 3.66 3.60 3.72 0.59
Agreeableness Ideal Personality Self-Acceptance 1 342 4.02 3.96 4.08 0.56
Agreeableness Ideal Personality Self-Acceptance 2 326 4.01 3.95 4.07 0.55
Agreeableness Ideal Personality Self-Improvement 1 362 4.01 3.96 4.07 0.54
Agreeableness Ideal Personality Self-Improvement 2 338 4.06 4.00 4.12 0.54
Compassion Current Personality Self-Acceptance 1 342 3.67 3.59 3.75 0.77
Compassion Current Personality Self-Acceptance 2 326 3.73 3.65 3.80 0.72
Compassion Current Personality Self-Improvement 1 362 3.70 3.62 3.77 0.73
Compassion Current Personality Self-Improvement 2 338 3.77 3.70 3.85 0.69
Compassion Ideal Personality Self-Acceptance 1 342 3.96 3.88 4.03 0.73
Compassion Ideal Personality Self-Acceptance 2 326 3.96 3.88 4.04 0.71
Compassion Ideal Personality Self-Improvement 1 362 3.93 3.85 4.00 0.71
Compassion Ideal Personality Self-Improvement 2 338 3.98 3.91 4.06 0.71
Respectfulness Current Personality Self-Acceptance 1 342 3.95 3.87 4.03 0.75
Respectfulness Current Personality Self-Acceptance 2 326 4.02 3.95 4.10 0.73
Respectfulness Current Personality Self-Improvement 1 362 3.92 3.84 4.00 0.77
Respectfulness Current Personality Self-Improvement 2 338 4.00 3.92 4.07 0.71
Respectfulness Ideal Personality Self-Acceptance 1 342 4.37 4.31 4.43 0.58
Respectfulness Ideal Personality Self-Acceptance 2 326 4.37 4.31 4.44 0.62
Respectfulness Ideal Personality Self-Improvement 1 362 4.37 4.31 4.43 0.62
Respectfulness Ideal Personality Self-Improvement 2 338 4.40 4.34 4.46 0.57
Trust Current Personality Self-Acceptance 1 342 3.04 2.95 3.13 0.83
Trust Current Personality Self-Acceptance 2 326 3.13 3.04 3.22 0.81
Trust Current Personality Self-Improvement 1 362 3.07 2.98 3.15 0.81
Trust Current Personality Self-Improvement 2 338 3.22 3.13 3.30 0.80
Trust Ideal Personality Self-Acceptance 1 342 3.74 3.66 3.82 0.73
Trust Ideal Personality Self-Acceptance 2 326 3.71 3.63 3.79 0.72
Trust Ideal Personality Self-Improvement 1 362 3.74 3.67 3.82 0.72
Trust Ideal Personality Self-Improvement 2 338 3.79 3.72 3.87 0.72
Conscientiousness Current Personality Self-Acceptance 1 342 3.32 3.24 3.41 0.80
Conscientiousness Current Personality Self-Acceptance 2 326 3.47 3.39 3.56 0.80
Conscientiousness Current Personality Self-Improvement 1 362 3.38 3.31 3.46 0.76
Conscientiousness Current Personality Self-Improvement 2 338 3.52 3.44 3.59 0.72
Conscientiousness Ideal Personality Self-Acceptance 1 342 4.39 4.34 4.45 0.50
Conscientiousness Ideal Personality Self-Acceptance 2 326 4.42 4.37 4.47 0.47
Conscientiousness Ideal Personality Self-Improvement 1 362 4.39 4.34 4.44 0.49
Conscientiousness Ideal Personality Self-Improvement 2 338 4.41 4.36 4.46 0.46
Organization Current Personality Self-Acceptance 1 342 3.43 3.31 3.54 1.05
Organization Current Personality Self-Acceptance 2 326 3.55 3.44 3.66 1.02
Organization Current Personality Self-Improvement 1 362 3.49 3.39 3.60 1.02
Organization Current Personality Self-Improvement 2 338 3.64 3.54 3.75 0.94
Organization Ideal Personality Self-Acceptance 1 342 4.41 4.35 4.47 0.57
Organization Ideal Personality Self-Acceptance 2 326 4.42 4.36 4.48 0.55
Organization Ideal Personality Self-Improvement 1 362 4.39 4.33 4.46 0.60
Organization Ideal Personality Self-Improvement 2 338 4.46 4.40 4.52 0.56
Productiveness Current Personality Self-Acceptance 1 342 3.09 2.99 3.19 0.92
Productiveness Current Personality Self-Acceptance 2 326 3.28 3.18 3.39 0.94
Productiveness Current Personality Self-Improvement 1 362 3.16 3.07 3.25 0.90
Productiveness Current Personality Self-Improvement 2 338 3.33 3.24 3.42 0.85
Productiveness Ideal Personality Self-Acceptance 1 342 4.51 4.46 4.57 0.55
Productiveness Ideal Personality Self-Acceptance 2 326 4.56 4.50 4.61 0.51
Productiveness Ideal Personality Self-Improvement 1 362 4.50 4.44 4.56 0.59
Productiveness Ideal Personality Self-Improvement 2 338 4.53 4.47 4.58 0.53
Responsibility Current Personality Self-Acceptance 1 342 3.45 3.37 3.54 0.80
Responsibility Current Personality Self-Acceptance 2 326 3.58 3.50 3.67 0.77
Responsibility Current Personality Self-Improvement 1 362 3.50 3.42 3.58 0.78
Responsibility Current Personality Self-Improvement 2 338 3.58 3.49 3.66 0.78
Responsibility Ideal Personality Self-Acceptance 1 342 4.26 4.19 4.33 0.65
Responsibility Ideal Personality Self-Acceptance 2 326 4.29 4.22 4.36 0.62
Responsibility Ideal Personality Self-Improvement 1 362 4.27 4.21 4.34 0.62
Responsibility Ideal Personality Self-Improvement 2 338 4.26 4.19 4.32 0.62
Neuroticism Current Personality Self-Acceptance 1 342 3.31 3.22 3.40 0.84
Neuroticism Current Personality Self-Acceptance 2 326 3.13 3.04 3.22 0.84
Neuroticism Current Personality Self-Improvement 1 362 3.29 3.20 3.37 0.85
Neuroticism Current Personality Self-Improvement 2 338 3.08 2.99 3.17 0.83
Neuroticism Ideal Personality Self-Acceptance 1 342 1.75 1.70 1.80 0.46
Neuroticism Ideal Personality Self-Acceptance 2 326 1.76 1.71 1.81 0.47
Neuroticism Ideal Personality Self-Improvement 1 362 1.77 1.72 1.82 0.52
Neuroticism Ideal Personality Self-Improvement 2 338 1.72 1.67 1.78 0.51
Anxiety Current Personality Self-Acceptance 1 342 3.60 3.51 3.70 0.89
Anxiety Current Personality Self-Acceptance 2 326 3.48 3.38 3.58 0.90
Anxiety Current Personality Self-Improvement 1 362 3.59 3.49 3.68 0.91
Anxiety Current Personality Self-Improvement 2 338 3.39 3.30 3.48 0.86
Anxiety Ideal Personality Self-Acceptance 1 342 1.94 1.88 2.01 0.62
Anxiety Ideal Personality Self-Acceptance 2 326 1.97 1.90 2.04 0.62
Anxiety Ideal Personality Self-Improvement 1 362 2.00 1.92 2.07 0.70
Anxiety Ideal Personality Self-Improvement 2 338 1.91 1.84 1.97 0.64
Depression Current Personality Self-Acceptance 1 342 3.23 3.11 3.34 1.04
Depression Current Personality Self-Acceptance 2 326 2.96 2.85 3.07 1.02
Depression Current Personality Self-Improvement 1 362 3.20 3.10 3.30 0.98
Depression Current Personality Self-Improvement 2 338 2.95 2.84 3.05 1.00
Depression Ideal Personality Self-Acceptance 1 342 1.53 1.47 1.58 0.51
Depression Ideal Personality Self-Acceptance 2 326 1.50 1.45 1.56 0.52
Depression Ideal Personality Self-Improvement 1 362 1.54 1.48 1.60 0.58
Depression Ideal Personality Self-Improvement 2 338 1.51 1.45 1.57 0.56
Volatility Current Personality Self-Acceptance 1 342 3.09 2.98 3.20 1.03
Volatility Current Personality Self-Acceptance 2 326 2.96 2.85 3.06 0.99
Volatility Current Personality Self-Improvement 1 362 3.08 2.97 3.18 1.01
Volatility Current Personality Self-Improvement 2 338 2.90 2.79 3.00 0.98
Volatility Ideal Personality Self-Acceptance 1 342 1.78 1.71 1.84 0.59
Volatility Ideal Personality Self-Acceptance 2 326 1.80 1.74 1.87 0.62
Volatility Ideal Personality Self-Improvement 1 362 1.77 1.71 1.83 0.61
Volatility Ideal Personality Self-Improvement 2 338 1.75 1.68 1.82 0.63
Openness Current Personality Self-Acceptance 1 342 3.65 3.59 3.72 0.63
Openness Current Personality Self-Acceptance 2 326 3.75 3.68 3.81 0.61
Openness Current Personality Self-Improvement 1 362 3.61 3.55 3.67 0.59
Openness Current Personality Self-Improvement 2 338 3.69 3.63 3.76 0.63
Openness Ideal Personality Self-Acceptance 1 342 4.10 4.05 4.16 0.52
Openness Ideal Personality Self-Acceptance 2 326 4.11 4.05 4.17 0.54
Openness Ideal Personality Self-Improvement 1 362 4.05 3.99 4.10 0.53
Openness Ideal Personality Self-Improvement 2 338 4.06 4.01 4.12 0.53
Curiosity Current Personality Self-Acceptance 1 342 3.77 3.69 3.85 0.76
Curiosity Current Personality Self-Acceptance 2 326 3.90 3.82 3.98 0.71
Curiosity Current Personality Self-Improvement 1 362 3.74 3.66 3.81 0.75
Curiosity Current Personality Self-Improvement 2 338 3.82 3.73 3.90 0.76
Curiosity Ideal Personality Self-Acceptance 1 342 4.09 4.02 4.16 0.66
Curiosity Ideal Personality Self-Acceptance 2 326 4.12 4.05 4.19 0.64
Curiosity Ideal Personality Self-Improvement 1 362 4.03 3.96 4.10 0.69
Curiosity Ideal Personality Self-Improvement 2 338 4.04 3.97 4.11 0.69
Aesthetic Current Personality Self-Acceptance 1 342 3.57 3.48 3.66 0.84
Aesthetic Current Personality Self-Acceptance 2 326 3.63 3.54 3.72 0.79
Aesthetic Current Personality Self-Improvement 1 362 3.50 3.42 3.58 0.79
Aesthetic Current Personality Self-Improvement 2 338 3.57 3.49 3.66 0.81
Aesthetic Ideal Personality Self-Acceptance 1 342 3.82 3.74 3.89 0.71
Aesthetic Ideal Personality Self-Acceptance 2 326 3.87 3.79 3.95 0.73
Aesthetic Ideal Personality Self-Improvement 1 362 3.81 3.74 3.88 0.68
Aesthetic Ideal Personality Self-Improvement 2 338 3.78 3.71 3.86 0.73
Imagination Current Personality Self-Acceptance 1 342 3.62 3.54 3.71 0.83
Imagination Current Personality Self-Acceptance 2 326 3.71 3.62 3.80 0.81
Imagination Current Personality Self-Improvement 1 362 3.58 3.50 3.66 0.77
Imagination Current Personality Self-Improvement 2 338 3.69 3.60 3.78 0.82
Imagination Ideal Personality Self-Acceptance 1 342 4.40 4.34 4.47 0.61
Imagination Ideal Personality Self-Acceptance 2 326 4.35 4.28 4.42 0.63
Imagination Ideal Personality Self-Improvement 1 362 4.31 4.24 4.38 0.67
Imagination Ideal Personality Self-Improvement 2 338 4.37 4.30 4.43 0.61

Plotting mean-level changes on a descriptive level: Big Five dimensions and facets

Show the code
ggplot(df_manip_check_forplot, 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Trait Level (95% CI)") + 
  facet_wrap( ~ Trait, ncol = 4) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Extraversion

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Extraversion"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Agreeableness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Agreeableness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Conscientiousness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Conscientiousness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Neuroticism

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Neuroticism"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

Plotting mean-level changes on a descriptive level: Openness

Show the code
ggplot(df_manip_check_forplot %>% filter(Trait=="Openness"), 
       aes(y = m_trait, x = Time, shape = Group, color = Reference)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Trait Level (95% CI)") + 
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

7.4.1.2 Well-Being

Prepare data frame for plotting:

Show the code
df_manip_check_wb_forplot <- df_sbsa %>% 
  mutate(time_d = time - 1) %>% 
  select(pid, time_d, rando, swls, meaning, selfes, concept) %>% 
  pivot_longer(-c(pid, time_d, rando), 
               cols_vary = "slowest",
               names_to = c("trait"),
               values_to = "score") %>% 
  mutate(trait = case_when(trait=="swls" ~ "Life Satisfaction", trait=="meaning" ~ "Meaning in Life", 
                           trait=="selfes" ~ "Self-Esteem", trait=="concept" ~ "Self-Concept Clarity")) %>% 
  filter(!is.na(score)) %>% 
  group_by(trait, rando, time_d) %>% 
  summarise(n = n(), m_trait = mean(score), sd_trait = sd(score)) %>% 
  ungroup() %>% 
  mutate(Group = factor(rando, levels = c("Self-Improvement", "Self-Acceptance"), labels = c("Self-Improvement", "Self-Acceptance")),
         Time = factor(time_d+1),
         Trait = factor(trait, 
                        levels = c("Life Satisfaction", "Meaning in Life", "Self-Esteem", "Self-Concept Clarity"), # group facets with each trait
                        labels = c("Life Satisfaction", "Meaning in Life", "Self-Esteem", "Self-Concept Clarity")),
         lwr95 = m_trait - qnorm(0.975)*sd_trait/sqrt(n),
         upr95 = m_trait + qnorm(0.975)*sd_trait/sqrt(n)) %>% 
  select(-c(time_d, rando, trait))

Table of all outcomes:

Show the code
df_manip_check_wb_forplot %>% arrange(Trait) %>% 
  mutate_if(is.numeric, round, digits=2) %>% 
  select(Trait, Group, Time, n, m_trait, lwr95, upr95, sd_trait) %>% 
  kable(digits = 2)
Trait Group Time n m_trait lwr95 upr95 sd_trait
Life Satisfaction Self-Acceptance 1 340 2.65 2.54 2.75 0.95
Life Satisfaction Self-Acceptance 2 326 2.92 2.81 3.02 0.98
Life Satisfaction Self-Improvement 1 357 2.68 2.58 2.77 0.92
Life Satisfaction Self-Improvement 2 338 2.93 2.82 3.03 0.98
Meaning in Life Self-Acceptance 1 340 3.57 3.45 3.68 1.12
Meaning in Life Self-Acceptance 2 326 3.83 3.71 3.96 1.16
Meaning in Life Self-Improvement 1 357 3.45 3.34 3.56 1.06
Meaning in Life Self-Improvement 2 338 3.80 3.68 3.92 1.13
Self-Esteem Self-Acceptance 1 340 3.14 3.04 3.23 0.90
Self-Esteem Self-Acceptance 2 326 3.46 3.37 3.56 0.89
Self-Esteem Self-Improvement 1 357 3.14 3.06 3.23 0.82
Self-Esteem Self-Improvement 2 338 3.45 3.36 3.54 0.86
Self-Concept Clarity Self-Acceptance 1 340 2.94 2.85 3.03 0.84
Self-Concept Clarity Self-Acceptance 2 326 3.15 3.05 3.24 0.86
Self-Concept Clarity Self-Improvement 1 357 2.95 2.87 3.03 0.80
Self-Concept Clarity Self-Improvement 2 338 3.22 3.13 3.31 0.85

Plotting mean-level changes on a descriptive level: all four well-being aspects

Show the code
ggplot(df_manip_check_wb_forplot, 
       aes(y = m_trait, x = Time, shape = Group)) + 
  geom_point(position = position_dodge(0.3)) +
  scale_shape_manual(values=c(17, 19)) + 
  geom_errorbar(aes(ymin = lwr95, ymax = upr95), width=.3, position=position_dodge(0.3)) +
  ylab("Mean Well-Being Level (95% CI)") + 
  facet_wrap( ~ Trait, ncol = 2) +
  theme_bw() +
  theme(panel.grid.minor = element_blank(),
        strip.background=element_rect(fill="grey93"))

7.5 Word cloud of change descriptions (e)

Generate word clouds based on the content from the free-form change descriptions written after the intervention at T2.

For data protection reasons, we don’t provide the free-form change descriptions on the OSF. Therefore, the following code chunks are not run (eval: false). We do, however, provide an even more extensive overview of these open-response variables including word clouds in the separate document textmining.html.

Prepare data, separately for each intervention group

Show the code
# see tutorial here: https://towardsdatascience.com/create-a-word-cloud-with-r-bde3e7422e8a

# self-improvement group

# Create a vector containing only the text
text_sb <- df_sbsa %>% filter(!is.na(sb14_01)) %>% pull(sb14_01)
text_sb <- gsub("[\r\n]", " ", text_sb)
# Create a corpus  
docs_sb <- tm::VCorpus(tm::VectorSource(text_sb))

# cleaning the text
docs_sb <- docs_sb %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sb <- tm_map(docs_sb, content_transformer(tolower))
docs_sb <- tm_map(docs_sb, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sb <- TermDocumentMatrix(docs_sb) 
matrix_sb <- as.matrix(dtm_sb) 
words_sb <- sort(rowSums(matrix_sb), decreasing=TRUE) 
df_words_sb <- data.frame(word = names(words_sb), freq=words_sb)
# remove a few of the frequent "non-words"
df_words_sb <- df_words_sb %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

# self-acceptance group

# Create a vector containing only the text
text_sa <- df_sbsa %>% filter(!is.na(sa13_01)) %>% pull(sa13_01)
text_sa <- gsub("[\r\n]", " ", text_sa)
# Create a corpus  
docs_sa <- tm::VCorpus(tm::VectorSource(text_sa))

# cleaning the text
docs_sa <- docs_sa %>%
  tm_map(removeNumbers) %>%
  tm_map(removePunctuation) %>%
  tm_map(stripWhitespace)
docs_sa <- tm_map(docs_sa, content_transformer(tolower))
docs_sa <- tm_map(docs_sa, removeWords, stopwords("english"))

# Create a document-term-matrix
dtm_sa <- TermDocumentMatrix(docs_sa) 
matrix_sa <- as.matrix(dtm_sa) 
words_sa <- sort(rowSums(matrix_sa), decreasing=TRUE) 
df_words_sa <- data.frame(word = names(words_sa), freq=words_sa)
# remove a few of the frequent "non-words"
df_words_sa <- df_words_sa %>% as_tibble() %>% 
  filter(!word %in% c("ive", "didnt", "cant", "dont"))

Generate the word cloud: for self-improvement group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sb$word, freq = df_words_sb$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Generate the word cloud: for self-acceptance group

Show the code
set.seed(1234) # for reproducibility 
wordcloud(words = df_words_sa$word, freq = df_words_sa$freq, min.freq = 1,           
          max.words=150, random.order=FALSE, rot.per=0.35,            
          colors=brewer.pal(8, "Dark2"))

Lastly, delete free-form text variables again from data set

df_sbsa <- df_sbsa %>% select(-any_of(c("sb14_01", "sa13_01")))
base::save(df_sbsa, file = "data/df_sbsa.rda")

7.6 Age as moderator of trait change (f)

Does age moderate the extent to which participants in the intervention changed over time?

7.6.1 Descriptives: Age & change goals

Some descriptives first:

summary(df_sbsa$age)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
  19.00   23.00   28.00   30.66   36.00   69.00       3 

Correlation age & general improvement goal

cor.test(df_sbsa$age, df_sbsa$sb06_01)

    Pearson's product-moment correlation

data:  df_sbsa$age and df_sbsa$sb06_01
t = -2.0183, df = 353, p-value = 0.04432
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.208577566 -0.002750883
sample estimates:
       cor 
-0.1068084 

Significant negative correlation.

Frequency of self-improvement behaviors
- (1) I thought about the ways I would like to change
- (2) I sought out environments that would help me be the kind of person I want to be
- (3) I practiced new habits to achieve my change goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa$age, df_sbsa$sb04_01)) %>% mutate(item = "sb04_01"),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb04_02)) %>% mutate(item = "sb04_02"),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb04_03)) %>% mutate(item = "sb04_03")
) %>% select(item, estimate, conf.low, conf.high, p.value)
  , digits = 3)
item estimate conf.low conf.high p.value
sb04_01 0.025 -0.082 0.132 0.644
sb04_02 -0.086 -0.191 0.021 0.115
sb04_03 -0.100 -0.205 0.007 0.066

Facet-level improvement goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_01)) %>% mutate(facet = names(b5_vars)[5 + 1]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_02)) %>% mutate(facet = names(b5_vars)[5 + 2]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_03)) %>% mutate(facet = names(b5_vars)[5 + 3]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_04)) %>% mutate(facet = names(b5_vars)[5 + 4]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_05)) %>% mutate(facet = names(b5_vars)[5 + 5]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_06)) %>% mutate(facet = names(b5_vars)[5 + 6]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_07)) %>% mutate(facet = names(b5_vars)[5 + 7]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_08)) %>% mutate(facet = names(b5_vars)[5 + 8]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_09)) %>% mutate(facet = names(b5_vars)[5 + 9]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_10)) %>% mutate(facet = names(b5_vars)[5 + 10]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_11)) %>% mutate(facet = names(b5_vars)[5 + 11]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_12)) %>% mutate(facet = names(b5_vars)[5 + 12]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_13)) %>% mutate(facet = names(b5_vars)[5 + 13]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_14)) %>% mutate(facet = names(b5_vars)[5 + 14]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sb07_15)) %>% mutate(facet = names(b5_vars)[5 + 15])
) %>% select(facet, estimate, conf.low, conf.high, p.value)
  , digits = 3)
facet estimate conf.low conf.high p.value
sociability -0.114 -0.215 -0.010 0.032
assertiveness 0.024 -0.080 0.128 0.651
energy 0.012 -0.092 0.116 0.822
compassion -0.009 -0.113 0.095 0.866
respectfulness 0.043 -0.061 0.147 0.415
trust 0.033 -0.071 0.137 0.532
organization -0.159 -0.258 -0.055 0.003
productiveness -0.160 -0.260 -0.057 0.002
responsibility -0.117 -0.218 -0.013 0.028
anxiety -0.122 -0.223 -0.018 0.021
depression -0.071 -0.174 0.033 0.181
volatility -0.005 -0.109 0.099 0.923
curiosity 0.001 -0.103 0.105 0.990
aesthetic 0.024 -0.080 0.128 0.651
imagination 0.011 -0.093 0.115 0.836

Negative correlations for conscientiousness facets.

Correlation age & general acceptance goal

cor.test(df_sbsa$age, df_sbsa$sa06_01)

    Pearson's product-moment correlation

data:  df_sbsa$age and df_sbsa$sa06_01
t = -2.8085, df = 336, p-value = 0.005268
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.25402332 -0.04550899
sample estimates:
       cor 
-0.1514506 

Significant negative correlation.

Frequency of self-acceptance behaviors
- (1) I thought about how I could be less judgmental and more self-affirming
- (2) I sought out environments that would help me accept who I am
- (3) I practiced new self-acceptance habits to affirm who I am

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa$age, df_sbsa$sa04_01)) %>% mutate(item = "sa04_01"),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa04_02)) %>% mutate(item = "sa04_02"),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa04_03)) %>% mutate(item = "sa04_03")
) %>% select(item, estimate, conf.low, conf.high, p.value)
  , digits = 3)
item estimate conf.low conf.high p.value
sa04_01 -0.070 -0.177 0.039 0.207
sa04_02 -0.199 -0.301 -0.092 0.000
sa04_03 -0.113 -0.219 -0.005 0.041

Facet-level acceptance goals

Show the code
kable(
bind_rows(
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_01)) %>% mutate(facet = names(b5_vars)[5 + 1]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_02)) %>% mutate(facet = names(b5_vars)[5 + 2]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_03)) %>% mutate(facet = names(b5_vars)[5 + 3]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_04)) %>% mutate(facet = names(b5_vars)[5 + 4]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_05)) %>% mutate(facet = names(b5_vars)[5 + 5]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_06)) %>% mutate(facet = names(b5_vars)[5 + 6]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_07)) %>% mutate(facet = names(b5_vars)[5 + 7]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_08)) %>% mutate(facet = names(b5_vars)[5 + 8]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_09)) %>% mutate(facet = names(b5_vars)[5 + 9]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_10)) %>% mutate(facet = names(b5_vars)[5 + 10]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_11)) %>% mutate(facet = names(b5_vars)[5 + 11]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_12)) %>% mutate(facet = names(b5_vars)[5 + 12]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_13)) %>% mutate(facet = names(b5_vars)[5 + 13]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_14)) %>% mutate(facet = names(b5_vars)[5 + 14]),
  tidy(cor.test(df_sbsa$age, df_sbsa$sa07_15)) %>% mutate(facet = names(b5_vars)[5 + 15])
) %>% select(facet, estimate, conf.low, conf.high, p.value)
  , digits = 3)
facet estimate conf.low conf.high p.value
sociability 0.020 -0.086 0.127 0.708
assertiveness -0.008 -0.115 0.098 0.880
energy 0.029 -0.078 0.135 0.600
compassion 0.071 -0.036 0.176 0.195
respectfulness 0.009 -0.098 0.115 0.876
trust 0.013 -0.093 0.120 0.805
organization -0.152 -0.255 -0.046 0.005
productiveness -0.192 -0.293 -0.087 0.000
responsibility -0.116 -0.220 -0.009 0.033
anxiety -0.067 -0.173 0.040 0.216
depression -0.087 -0.192 0.020 0.111
volatility -0.001 -0.108 0.105 0.983
curiosity -0.081 -0.186 0.026 0.136
aesthetic 0.041 -0.066 0.147 0.448
imagination 0.014 -0.093 0.121 0.794

Negative correlations for conscientiousness facets.

Correlation age & profile similarity (facet-level)

cor.test(df_sbsa$age, df_sbsa$profile_corr_facet_z)

    Pearson's product-moment correlation

data:  df_sbsa$age and df_sbsa$profile_corr_facet_z
t = 2.9125, df = 1363, p-value = 0.003644
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.0256938 0.1311555
sample estimates:
       cor 
0.07864466 

Correlation age & profile similarity (item-level)

cor.test(df_sbsa$age, df_sbsa$profile_corr_item_z)

    Pearson's product-moment correlation

data:  df_sbsa$age and df_sbsa$profile_corr_item_z
t = 3.2304, df = 1363, p-value = 0.001266
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.03426678 0.13957891
sample estimates:
       cor 
0.08716637 

Significantly higher similarity between current- and ideal personality with older age.

7.6.2 Moderation analysis: linear age

Reshape and split data set by intervention group:

Show the code
df_sbsa_wide_pers_mod_age <- df_sbsa %>% 
  arrange(pid, time) %>% 
  mutate(age_z = (age - mean(age, na.rm=T)) / sd(age, na.rm=T)) %>% 
  group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  select(pid, age_z)

df_sbsa_wide_pers_mod_age <- df_sbsa_wide_pers %>% left_join(group_assign) %>% 
  left_join(df_sbsa_wide_pers_mod_age)
7.6.2.1 Run models

Adapt latent change score model from above (adding moderation by age) and add grouping factor in estimation (adding vectorized equality constraints to the model step by step):

Show the code
# create templates:

# configural invariance
trait_template_age_config <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2a", "lamb2b")*ind02_t1 + c("lamb3a", "lamb3b")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2a", "lamb2b")*ind02_t2 + c("lamb3a", "lamb3b")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main_a", "main_b")*age_z           # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod_a", "mod_b")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# weak invariance
trait_template_age_weak <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int_a", "d_int_b")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int_a", "b5_int_b")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main_a", "main_b")*age_z           # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod_a", "mod_b")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2a", "m2b")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3a", "m3b")*1     # This estimates the intercept of X3 at T2
'

# strong invariance
trait_template_age_strong <- '
trait_t1 =~ 1*ind01_t1 +  c("lamb2", "lamb2")*ind02_t1 + c("lamb3", "lamb3")*ind03_t1 # This specifies the measurement model for trait_t1 
trait_t2 =~ 1*ind01_t2 +  c("lamb2", "lamb2")*ind02_t2 + c("lamb3", "lamb3")*ind03_t2 # This specifies the measurement model for trait_t2 with the equality constrained factor loadings

trait_t2 ~ 1*trait_t1     # This parameter regresses trait_t2 perfectly on trait_t1
d_trait_1 =~ 1*trait_t2   # This defines the latent change score factor as measured perfectly by scores on trait_t2
trait_t2 ~ 0*1            # This line constrains the intercept of trait_t2 to 0
trait_t2 ~~ 0*trait_t2    # This fixes the variance of trait_t2 to 0

d_trait_1 ~ c("d_int", "d_int")*1              # This estimates the intercept of the change score 
trait_t1 ~ c("b5_int", "b5_int")*1               # This estimates the intercept of trait_t1 
d_trait_1 ~~ c("d_var_a", "d_var_b")*d_trait_1     # This estimates the variance of the change scores 
trait_t1 ~~ c("b5_var_a", "b5_var_b")*trait_t1         # This estimates the variance of trait_t1 
d_trait_1 ~~ c("fb_a", "fb_b")* trait_t1   # This estimates the self-feedback parameter, as a covariance! -> therefore, the interpretation of the change score
trait_t1 ~ c("main", "main")*age_z         # This estimates the moderation effect on personality at T1
d_trait_1 ~ c("mod", "mod")*age_z          # This estimates the moderation effect on the change score

age_z ~ 0*1            # This fixes the intercept of the moderator to 0
age_z ~~ c("varmod_a", "varmod_b")*age_z         # This estimates the variance of the moderator

ind01_t1 ~~ c("cov1a", "cov1b")*ind01_t2   # This allows residual covariance on indicator X1 across T1 and T2
ind02_t1 ~~ c("cov2a", "cov2b")*ind02_t2   # This allows residual covariance on indicator X2 across T1 and T2
ind03_t1 ~~ c("cov3a", "cov3b")*ind03_t2   # This allows residual covariance on indicator X3 across T1 and T2

ind01_t1 ~~ c("res1a", "res1b")*ind01_t1   # This allows residual variance on indicator X1 at T1 
ind02_t1 ~~ c("res2a", "res2b")*ind02_t1   # This allows residual variance on indicator X2 at T1
ind03_t1 ~~ c("res3a", "res3b")*ind03_t1   # This allows residual variance on indicator X3 at T1

ind01_t2 ~~ c("res1a", "res1b")*ind01_t2  # This allows residual variance on indicator X1 at T2 
ind02_t2 ~~ c("res2a", "res2b")*ind02_t2  # This allows residual variance on indicator X2 at T2 
ind03_t2 ~~ c("res3a", "res3b")*ind03_t2  # This allows residual variance on indicator X3 at T2

ind01_t1 ~ 0*1      # This constrains the intercept of X1 to 0 at T1
ind02_t1 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T1
ind03_t1 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T1

ind01_t2 ~ 0*1      # This constrains the intercept of X1 to 0 at T2
ind02_t2 ~ c("m2", "m2")*1     # This estimates the intercept of X2 at T2
ind03_t2 ~ c("m3", "m3")*1     # This estimates the intercept of X3 at T2
'

# strict invariance -> not really needed for this analysis

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_age_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = df_sbsa_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_config_current")), trait_age_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_age_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = df_sbsa_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_config_ideal")), trait_age_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_age_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = df_sbsa_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_weak_current")), trait_age_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_age_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = df_sbsa_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_weak_ideal")), trait_age_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_age_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_age_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = df_sbsa_wide_pers_mod_age, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_strong_current")), trait_age_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_age_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_age_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = df_sbsa_wide_pers_mod_age, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "rando", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_age_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_age_strong_ideal")), trait_age_fit_strong_ideal))
}
7.6.2.2 Current personality personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_age_config_current, fit_lcs_extra_age_weak_current, fit_lcs_extra_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_age_config_current 34 9491.1 9655.7 42.497                   
fit_lcs_extra_age_weak_current   36 9491.5 9646.9 46.833     3.8734       2
fit_lcs_extra_age_strong_current 42 9481.9 9610.0 49.319     2.4869       6
                                 Pr(>Chisq)
fit_lcs_extra_age_config_current           
fit_lcs_extra_age_weak_current       0.1442
fit_lcs_extra_age_strong_current     0.8699
# show model with varying latent change parameters 
# -> change parameter is "d_extra_1 ~1"
# -> main effect of age on T1 trait is "extra_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_extra_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_extra_current <- broom::tidy(fit_lcs_extra_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a 0.159 0.452 6.114 0.000
d_extra_1 ~1 d_int_b 0.136 0.374 5.350 0.000
extra_t1 ~ age_z main_a -0.003 -0.005 -0.084 0.933
extra_t1 ~ age_z main_b 0.026 0.044 0.830 0.407
d_extra_1 ~ age_z mod_a 0.025 0.070 0.933 0.351
d_extra_1 ~ age_z mod_b -0.022 -0.061 -0.777 0.437
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.148 0.421 8.034 0.000
d_extra_1 ~1 d_int 0.148 0.407 8.034 0.000
extra_t1 ~ age_z main 0.012 0.019 0.529 0.597
extra_t1 ~ age_z main 0.012 0.021 0.529 0.597
d_extra_1 ~ age_z mod 0.002 0.005 0.093 0.926
d_extra_1 ~ age_z mod 0.002 0.005 0.093 0.926
# model fit
kable(broom::glance(fit_lcs_extra_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 9491.454 9646.911 0.996 0.029 0.029

No significant moderation by age for extraversion (similar in both groups). No significant differences according to the LRTs.

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_age_config_current, fit_lcs_agree_age_weak_current, fit_lcs_agree_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_age_config_current 34 8373.6 8538.3 56.261                   
fit_lcs_agree_age_weak_current   36 8370.1 8525.6 56.705     0.3531       2
fit_lcs_agree_age_strong_current 42 8376.3 8504.3 74.872    16.7567       6
                                 Pr(>Chisq)  
fit_lcs_agree_age_config_current             
fit_lcs_agree_age_weak_current      0.83817  
fit_lcs_agree_age_strong_current    0.01022 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> change parameter is "d_agree_1 ~1"
# -> main effect of age on T1 trait is "agree_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_agree_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_agree_current <- broom::tidy(fit_lcs_agree_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.042 0.198 2.342 0.019
d_agree_1 ~1 d_int_b 0.074 0.355 4.101 0.000
agree_t1 ~ age_z main_a -0.076 -0.186 -2.513 0.012
agree_t1 ~ age_z main_b 0.051 0.125 1.925 0.054
d_agree_1 ~ age_z mod_a 0.032 0.149 1.333 0.182
d_agree_1 ~ age_z mod_b 0.012 0.058 0.664 0.507
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.060 0.280 4.514 0.000
d_agree_1 ~1 d_int 0.060 0.283 4.514 0.000
agree_t1 ~ age_z main -0.010 -0.026 -0.487 0.627
agree_t1 ~ age_z main -0.010 -0.026 -0.487 0.627
d_agree_1 ~ age_z mod 0.023 0.107 1.573 0.116
d_agree_1 ~ age_z mod 0.023 0.111 1.573 0.116
# model fit
kable(broom::glance(fit_lcs_agree_age_strong_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 8376.26 8504.284 0.981 0.047 0.055

No significant moderation by age for agreeableness (similar in both groups). However, slight “main effect” of age on agreeableness at T1 that differs somewhat between groups -> significant differences according to LRTs (at p < .05).

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_age_config_current, fit_lcs_consc_age_weak_current, fit_lcs_consc_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_age_config_current 34 8870.0 9034.6 53.286                   
fit_lcs_consc_age_weak_current   36 8870.0 9025.5 57.305     4.1405       2
fit_lcs_consc_age_strong_current 42 8860.8 8988.8 60.074     2.7383       6
                                 Pr(>Chisq)
fit_lcs_consc_age_config_current           
fit_lcs_consc_age_weak_current       0.1262
fit_lcs_consc_age_strong_current     0.8409
# show model with varying latent change parameters 
# -> change parameter is "d_consc_1 ~1"
# -> main effect of age on T1 trait is "consc_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_consc_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_consc_current <- broom::tidy(fit_lcs_consc_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.157 0.436 6.273 0.000
d_consc_1 ~1 d_int_b 0.119 0.341 4.942 0.000
consc_t1 ~ age_z main_a 0.188 0.244 4.570 0.000
consc_t1 ~ age_z main_b 0.151 0.214 3.527 0.000
d_consc_1 ~ age_z mod_a -0.005 -0.013 -0.170 0.865
d_consc_1 ~ age_z mod_b -0.017 -0.049 -0.690 0.490
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.137 0.381 7.855 0.000
d_consc_1 ~1 d_int 0.137 0.392 7.855 0.000
consc_t1 ~ age_z main 0.166 0.217 5.543 0.000
consc_t1 ~ age_z main 0.166 0.234 5.543 0.000
d_consc_1 ~ age_z mod -0.011 -0.030 -0.592 0.554
d_consc_1 ~ age_z mod -0.011 -0.031 -0.592 0.554
# model fit
kable(broom::glance(fit_lcs_consc_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 8870.026 9025.483 0.994 0.041 0.027

No significant moderation by age for conscientiousness (similar in both groups). Main effect of age on conscientiousness at T1. No significant differences according to the LRTs.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_age_config_current, fit_lcs_neuro_age_weak_current, fit_lcs_neuro_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_age_config_current 34 9773.6 9938.2 38.295                   
fit_lcs_neuro_age_weak_current   36 9770.9 9926.4 39.652     1.4073       2
fit_lcs_neuro_age_strong_current 42 9767.5 9895.5 48.230     8.2096       6
                                 Pr(>Chisq)
fit_lcs_neuro_age_config_current           
fit_lcs_neuro_age_weak_current       0.4948
fit_lcs_neuro_age_strong_current     0.2231
# show model with varying latent change parameters 
# -> change parameter is "d_neuro_1 ~1"
# -> main effect of age on T1 trait is "neuro_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_neuro_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.185 -0.408 -6.129 0.000
d_neuro_1 ~1 d_int_b -0.205 -0.425 -6.720 0.000
neuro_t1 ~ age_z main_a 0.029 0.037 0.630 0.529
neuro_t1 ~ age_z main_b -0.079 -0.102 -1.518 0.129
d_neuro_1 ~ age_z mod_a -0.034 -0.074 -1.050 0.294
d_neuro_1 ~ age_z mod_b 0.070 0.147 2.124 0.034
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.196 -0.431 -9.093 0.000
d_neuro_1 ~1 d_int -0.196 -0.407 -9.093 0.000
neuro_t1 ~ age_z main -0.025 -0.032 -0.720 0.472
neuro_t1 ~ age_z main -0.025 -0.032 -0.720 0.472
d_neuro_1 ~ age_z mod 0.018 0.039 0.782 0.434
d_neuro_1 ~ age_z mod 0.018 0.037 0.782 0.434
# model fit
kable(broom::glance(fit_lcs_neuro_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 9770.942 9926.399 0.999 0.017 0.023

Very slight (but significant at p < .05) moderation by age for neuroticism in the self-improvement group only. However, no significant differences according to the LRTs.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_age_config_current, fit_lcs_openn_age_weak_current, fit_lcs_openn_age_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                 Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_age_config_current 34 8972.3 9136.9 41.957                   
fit_lcs_openn_age_weak_current   36 8972.3 9127.8 45.978     3.3861       2
fit_lcs_openn_age_strong_current 42 8967.8 9095.8 53.426     7.1753       6
                                 Pr(>Chisq)
fit_lcs_openn_age_config_current           
fit_lcs_openn_age_weak_current       0.1840
fit_lcs_openn_age_strong_current     0.3049
# show model with varying latent change parameters 
# -> change parameter is "d_openn_1 ~1"
# -> main effect of age on T1 trait is "openn_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_openn_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_openn_current <- broom::tidy(fit_lcs_openn_age_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.069 0.244 3.294 0.001
d_openn_1 ~1 d_int_b 0.062 0.296 3.254 0.001
openn_t1 ~ age_z main_a -0.040 -0.080 -1.230 0.219
openn_t1 ~ age_z main_b 0.043 0.093 1.517 0.129
d_openn_1 ~ age_z mod_a 0.039 0.135 1.554 0.120
d_openn_1 ~ age_z mod_b -0.018 -0.087 -0.900 0.368
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_age_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.068 0.238 4.724 0.000
d_openn_1 ~1 d_int 0.068 0.324 4.724 0.000
openn_t1 ~ age_z main 0.009 0.018 0.416 0.678
openn_t1 ~ age_z main 0.009 0.020 0.416 0.678
d_openn_1 ~ age_z mod 0.006 0.019 0.356 0.722
d_openn_1 ~ age_z mod 0.006 0.027 0.356 0.722
# model fit
kable(broom::glance(fit_lcs_openn_age_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 8972.32 9127.777 0.995 0.028 0.035

No significant moderation by age for current personality openness (similar in both groups). No significant differences according to the LRTs.

7.6.2.3 Ideal personality personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_age_config_ideal, fit_lcs_extra_age_weak_ideal, fit_lcs_extra_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_age_config_ideal 34 8599.1 8763.7 80.281                   
fit_lcs_extra_age_weak_ideal   36 8595.6 8751.0 80.748     0.4139       2
fit_lcs_extra_age_strong_ideal 42 8587.9 8715.9 85.067     4.3297       6
                               Pr(>Chisq)
fit_lcs_extra_age_config_ideal           
fit_lcs_extra_age_weak_ideal       0.8131
fit_lcs_extra_age_strong_ideal     0.6321
# show model with varying latent change parameters 
# -> change parameter is "d_extra_1 ~1"
# -> main effect of age on T1 trait is "extra_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_extra_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a -0.037 -0.096 -1.276 0.202
d_extra_1 ~1 d_int_b -0.028 -0.091 -1.043 0.297
extra_t1 ~ age_z main_a -0.057 -0.123 -1.882 0.060
extra_t1 ~ age_z main_b -0.037 -0.077 -1.179 0.238
d_extra_1 ~ age_z mod_a 0.012 0.030 0.430 0.667
d_extra_1 ~ age_z mod_b 0.014 0.046 0.488 0.626
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ", "extra_t1 ~ age_z", "d_extra_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.031 -0.080 -1.585 0.113
d_extra_1 ~1 d_int -0.031 -0.103 -1.585 0.113
extra_t1 ~ age_z main -0.047 -0.102 -2.130 0.033
extra_t1 ~ age_z main -0.047 -0.099 -2.130 0.033
d_extra_1 ~ age_z mod 0.012 0.031 0.624 0.532
d_extra_1 ~ age_z mod 0.012 0.040 0.624 0.532
# model fit
kable(broom::glance(fit_lcs_extra_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 8595.584 8751.041 0.964 0.059 0.042

No significant moderation by age for ideal personality extraversion (similar in both groups). No significant differences according to the LRTs. Slight evidence for main effect of age on ideal personality extraversion at T1.

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_age_config_ideal, fit_lcs_agree_age_weak_ideal, fit_lcs_agree_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_age_config_ideal 34 8491.2 8655.8 36.909                   
fit_lcs_agree_age_weak_ideal   36 8488.6 8644.0 38.321     1.2022       2
fit_lcs_agree_age_strong_ideal 42 8491.8 8619.8 53.535    15.2992       6
                               Pr(>Chisq)  
fit_lcs_agree_age_config_ideal             
fit_lcs_agree_age_weak_ideal      0.54822  
fit_lcs_agree_age_strong_ideal    0.01805 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> change parameter is "d_agree_1 ~1"
# -> main effect of age on T1 trait is "agree_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_agree_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a -0.011 -0.036 -0.500 0.617
d_agree_1 ~1 d_int_b 0.032 0.111 1.567 0.117
agree_t1 ~ age_z main_a -0.046 -0.102 -1.641 0.101
agree_t1 ~ age_z main_b 0.072 0.167 2.930 0.003
d_agree_1 ~ age_z mod_a 0.001 0.004 0.049 0.961
d_agree_1 ~ age_z mod_b -0.013 -0.044 -0.635 0.525
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ", "agree_t1 ~ age_z", "d_agree_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.012 0.040 0.814 0.416
d_agree_1 ~1 d_int 0.012 0.042 0.814 0.416
agree_t1 ~ age_z main 0.017 0.038 0.885 0.376
agree_t1 ~ age_z main 0.017 0.040 0.885 0.376
d_agree_1 ~ age_z mod -0.005 -0.016 -0.326 0.744
d_agree_1 ~ age_z mod -0.005 -0.017 -0.326 0.744
# model fit
kable(broom::glance(fit_lcs_agree_age_strong_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 28 8491.8 8619.824 0.994 0.028 0.051

No significant moderation by age for ideal personality agreeableness (similar in both groups). Significant differences according to the LRTs, but probably only because of the main effect on agreeableness at T1 which was only significant in the self-improvement group.

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_age_config_ideal, fit_lcs_consc_age_weak_ideal, fit_lcs_consc_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_age_config_ideal 34 7575.5 7740.1 53.367                   
fit_lcs_consc_age_weak_ideal   36 7573.6 7729.0 55.458     1.4968       2
fit_lcs_consc_age_strong_ideal 42 7565.1 7693.1 58.970     3.2860       6
                               Pr(>Chisq)
fit_lcs_consc_age_config_ideal           
fit_lcs_consc_age_weak_ideal       0.4731
fit_lcs_consc_age_strong_ideal     0.7722
# show model with varying latent change parameters 
# -> change parameter is "d_consc_1 ~1"
# -> main effect of age on T1 trait is "consc_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_consc_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.018 0.052 0.728 0.467
d_consc_1 ~1 d_int_b 0.025 0.073 1.031 0.303
consc_t1 ~ age_z main_a -0.031 -0.064 -0.940 0.347
consc_t1 ~ age_z main_b 0.000 0.000 0.003 0.997
d_consc_1 ~ age_z mod_a 0.006 0.017 0.202 0.840
d_consc_1 ~ age_z mod_b 0.015 0.044 0.583 0.560
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ", "consc_t1 ~ age_z", "d_consc_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.021 0.063 1.227 0.220
d_consc_1 ~1 d_int 0.021 0.062 1.227 0.220
consc_t1 ~ age_z main -0.014 -0.029 -0.638 0.523
consc_t1 ~ age_z main -0.014 -0.030 -0.638 0.523
d_consc_1 ~ age_z mod 0.011 0.031 0.561 0.575
d_consc_1 ~ age_z mod 0.011 0.031 0.561 0.575
# model fit
kable(broom::glance(fit_lcs_consc_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 7573.587 7729.044 0.988 0.039 0.04

No significant moderation by age for ideal personality conscientiousness (similar in both groups). No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_age_config_ideal, fit_lcs_neuro_age_weak_ideal, fit_lcs_neuro_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_age_config_ideal 34 7818.2 7982.8 49.894                   
fit_lcs_neuro_age_weak_ideal   36 7815.4 7970.8 51.087     1.0714       2
fit_lcs_neuro_age_strong_ideal 42 7809.8 7937.8 57.531     6.4817       6
                               Pr(>Chisq)
fit_lcs_neuro_age_config_ideal           
fit_lcs_neuro_age_weak_ideal       0.5853
fit_lcs_neuro_age_strong_ideal     0.3714
# show model with varying latent change parameters 
# -> change parameter is "d_neuro_1 ~1"
# -> main effect of age on T1 trait is "neuro_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_neuro_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a 0.011 0.035 0.460 0.645
d_neuro_1 ~1 d_int_b -0.042 -0.127 -1.840 0.066
neuro_t1 ~ age_z main_a 0.019 0.050 0.744 0.457
neuro_t1 ~ age_z main_b 0.002 0.004 0.067 0.947
d_neuro_1 ~ age_z mod_a 0.013 0.042 0.546 0.585
d_neuro_1 ~ age_z mod_b -0.008 -0.023 -0.312 0.755
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ", "neuro_t1 ~ age_z", "d_neuro_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.017 -0.053 -1.029 0.303
d_neuro_1 ~1 d_int -0.017 -0.050 -1.029 0.303
neuro_t1 ~ age_z main 0.011 0.029 0.599 0.549
neuro_t1 ~ age_z main 0.011 0.025 0.599 0.549
d_neuro_1 ~ age_z mod 0.002 0.007 0.129 0.897
d_neuro_1 ~ age_z mod 0.002 0.007 0.129 0.897
# model fit
kable(broom::glance(fit_lcs_neuro_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 7815.371 7970.829 0.99 0.034 0.039

No significant moderation by age for ideal personality neuroticism (similar in both groups). No significant differences according to the LRTs.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_age_config_ideal, fit_lcs_openn_age_weak_ideal, fit_lcs_openn_age_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                               Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_age_config_ideal 34 8696.3 8860.9 42.431                   
fit_lcs_openn_age_weak_ideal   36 8693.3 8848.8 43.493     1.0188       2
fit_lcs_openn_age_strong_ideal 42 8687.9 8816.0 50.095     6.2837       6
                               Pr(>Chisq)
fit_lcs_openn_age_config_ideal           
fit_lcs_openn_age_weak_ideal       0.6009
fit_lcs_openn_age_strong_ideal     0.3922
# show model with varying latent change parameters 
# -> change parameter is "d_openn_1 ~1"
# -> main effect of age on T1 trait is "openn_t1 ~ age_z"
# -> moderation effect of age on change parameter is "d_openn_1 ~ age_z"
# labelled parameter as "d_int_a" & "d_int_b" (a = Self-Acceptance group, b = Self-Improvement group)
params_age_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_age_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label)
kable(params_age_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a -0.014 -0.056 -0.668 0.504
d_openn_1 ~1 d_int_b 0.004 0.016 0.195 0.845
openn_t1 ~ age_z main_a -0.053 -0.141 -2.289 0.022
openn_t1 ~ age_z main_b -0.010 -0.026 -0.419 0.675
d_openn_1 ~ age_z mod_a 0.011 0.043 0.514 0.607
d_openn_1 ~ age_z mod_b -0.010 -0.041 -0.432 0.666
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_age_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ", "openn_t1 ~ age_z", "d_openn_1 ~ age_z")) %>% arrange(label), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int -0.005 -0.020 -0.351 0.725
d_openn_1 ~1 d_int -0.005 -0.020 -0.351 0.725
openn_t1 ~ age_z main -0.031 -0.082 -1.846 0.065
openn_t1 ~ age_z main -0.031 -0.081 -1.846 0.065
d_openn_1 ~ age_z mod 0.000 0.001 0.013 0.990
d_openn_1 ~ age_z mod 0.000 0.001 0.013 0.990
# model fit
kable(broom::glance(fit_lcs_openn_age_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
715 34 8693.336 8848.794 0.994 0.024 0.035

No significant moderation by age for ideal personality openness (similar in both groups). No significant differences according to the LRTs.

7.6.2.4 Summary of latent main and moderation effects of linear age
Show the code
params_age_summary <- bind_rows(
  params_age_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value),
  params_age_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% filter(str_detect(label, "m")==T) %>% select(trait, self, group = label, beta = std.all, p.value)
) 

kable(params_age_summary, digits = 3)
trait self group beta p.value
extraversion current main_a -0.005 0.933
extraversion current main_b 0.044 0.407
extraversion current mod_a 0.070 0.351
extraversion current mod_b -0.061 0.437
extraversion ideal main_a -0.123 0.060
extraversion ideal main_b -0.077 0.238
extraversion ideal mod_a 0.030 0.667
extraversion ideal mod_b 0.046 0.626
agreeableness current main_a -0.186 0.012
agreeableness current main_b 0.125 0.054
agreeableness current mod_a 0.149 0.182
agreeableness current mod_b 0.058 0.507
agreeableness ideal main_a -0.102 0.101
agreeableness ideal main_b 0.167 0.003
agreeableness ideal mod_a 0.004 0.961
agreeableness ideal mod_b -0.044 0.525
conscientiousness current main_a 0.244 0.000
conscientiousness current main_b 0.214 0.000
conscientiousness current mod_a -0.013 0.865
conscientiousness current mod_b -0.049 0.490
conscientiousness ideal main_a -0.064 0.347
conscientiousness ideal main_b 0.000 0.997
conscientiousness ideal mod_a 0.017 0.840
conscientiousness ideal mod_b 0.044 0.560
neuroticism current main_a 0.037 0.529
neuroticism current main_b -0.102 0.129
neuroticism current mod_a -0.074 0.294
neuroticism current mod_b 0.147 0.034
neuroticism ideal main_a 0.050 0.457
neuroticism ideal main_b 0.004 0.947
neuroticism ideal mod_a 0.042 0.585
neuroticism ideal mod_b -0.023 0.755
openness current main_a -0.080 0.219
openness current main_b 0.093 0.129
openness current mod_a 0.135 0.120
openness current mod_b -0.087 0.368
openness ideal main_a -0.141 0.022
openness ideal main_b -0.026 0.675
openness ideal mod_a 0.043 0.607
openness ideal mod_b -0.041 0.666

No moderation, and very few main effects of age (at T1) in either intervention group.

7.6.3 Moderation analysis: age group split

Now that we saw that the two intervention groups did not really differ in terms of linear moderation effects, let’s see whether perhaps across the whole sample we can find differences in two age groups (-> in multigroup SEM of latent change score).

Split age by age 30: roughly the sample mean and consistent with findings by Miller on age differences

df_sbsa_wide_pers_mod_age_split <- df_sbsa %>% 
  arrange(pid, time) %>% 
  mutate(age_d = ifelse(age <= 30, "young", "old")) %>% 
  group_by(pid) %>% slice_head(n=1) %>% ungroup() %>% 
  select(pid, age_d)

df_sbsa_wide_pers_mod_age_split <- df_sbsa_wide_pers %>% left_join(group_assign) %>% 
  left_join(df_sbsa_wide_pers_mod_age_split) %>% 
  filter(!is.na(age_d))
7.6.3.1 Run models
Show the code
# create templates: we can use the same templates as above just with different group composition (split by age_d variable)

# loop across 5 traits
for (i in 1:5) {
  item_nrs = b5_vars[[i]][[1]]
  short_name = str_trunc(names(b5_vars)[i], 5, ellipsis = "")
  # configural - current
  template_filled_config_current <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_config_current <- lavaan(template_filled_config_current, 
                                          data = df_sbsa_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_config_current")), template_filled_config_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_config_current")), trait_agesplit_fit_config_current))
  # configural - ideal
  template_filled_config_ideal <- str_replace_all(trait_template_main_config, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_config_ideal <- lavaan(template_filled_config_ideal, 
                                        data = df_sbsa_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_config_ideal")), template_filled_config_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_config_ideal")), trait_agesplit_fit_config_ideal))
  # weak - current
  template_filled_weak_current <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_weak_current <- lavaan(template_filled_weak_current, 
                                          data = df_sbsa_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_weak_current")), template_filled_weak_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_weak_current")), trait_agesplit_fit_weak_current))
  # weak - ideal
  template_filled_weak_ideal <- str_replace_all(trait_template_main_weak, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_weak_ideal <- lavaan(template_filled_weak_ideal, 
                                        data = df_sbsa_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = "loadings")
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_weak_ideal")), template_filled_weak_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_weak_ideal")), trait_agesplit_fit_weak_ideal))
  # strong - current
  template_filled_strong_current <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_curr_par1"), 
                                         "ind02" = paste0(short_name, "_curr_par2"), 
                                         "ind03" = paste0(short_name, "_curr_par3")))
  trait_agesplit_fit_strong_current <- lavaan(template_filled_strong_current, 
                                          data = df_sbsa_wide_pers_mod_age_split, 
                                          estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_strong_current")), template_filled_strong_current))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_strong_current")), trait_agesplit_fit_strong_current))
  # strong - ideal
  template_filled_strong_ideal <- str_replace_all(trait_template_main_strong, 
                                       c("trait" = short_name,
                                         "ind01" = paste0(short_name, "_ideal_par1"), 
                                         "ind02" = paste0(short_name, "_ideal_par2"), 
                                         "ind03" = paste0(short_name, "_ideal_par3")))
  trait_agesplit_fit_strong_ideal <- lavaan(template_filled_strong_ideal, 
                                        data = df_sbsa_wide_pers_mod_age_split, 
                                        estimator='mlr', fixed.x=FALSE, missing='fiml', group = "age_d", group.equal = c("intercepts", "loadings"))
  eval(call("<-", as.name(paste0("lcs_", short_name, "_agesplit_strong_ideal")), template_filled_strong_ideal))
  eval(call("<-", as.name(paste0("fit_lcs_", short_name, "_agesplit_strong_ideal")), trait_agesplit_fit_strong_ideal))
}
7.6.3.2 Current personality personality traits

Extraversion (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_agesplit_config_current, fit_lcs_extra_agesplit_weak_current, fit_lcs_extra_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_extra_agesplit_config_current 24 7440.5 7577.6 35.561           
fit_lcs_extra_agesplit_weak_current   26 7436.6 7564.6 35.724     0.1483
fit_lcs_extra_agesplit_strong_current 30 7433.1 7542.8 40.191     4.4243
                                      Df diff Pr(>Chisq)
fit_lcs_extra_agesplit_config_current                   
fit_lcs_extra_agesplit_weak_current         2     0.9285
fit_lcs_extra_agesplit_strong_current       4     0.3516
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_extra_current <- broom::tidy(fit_lcs_extra_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 "))
kable(params_agesplit_lcs_extra_current, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a 0.140 0.391 4.854 0
d_extra_1 ~1 d_int_b 0.155 0.427 6.423 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int 0.149 0.416 7.938 0
d_extra_1 ~1 d_int 0.149 0.410 7.938 0
# model fit
kable(broom::glance(fit_lcs_extra_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 7436.637 7564.582 0.996 0.032 0.024

Very similar change in extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_agesplit_config_current, fit_lcs_agree_agesplit_weak_current, fit_lcs_agree_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_agree_agesplit_config_current 24 6329.8 6466.8 43.544           
fit_lcs_agree_agesplit_weak_current   26 6328.0 6456.0 45.795     1.8417
fit_lcs_agree_agesplit_strong_current 30 6322.8 6432.5 48.608     2.9314
                                      Df diff Pr(>Chisq)
fit_lcs_agree_agesplit_config_current                   
fit_lcs_agree_agesplit_weak_current         2     0.3982
fit_lcs_agree_agesplit_strong_current       4     0.5694
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_agree_current <- broom::tidy(fit_lcs_agree_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 "))
kable(params_agesplit_lcs_agree_current, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.083 0.428 4.146 0.000
d_agree_1 ~1 d_int_b 0.044 0.197 2.662 0.008
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.059 0.302 4.7 0
d_agree_1 ~1 d_int 0.059 0.266 4.7 0
# model fit
kable(broom::glance(fit_lcs_agree_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 6328.005 6455.95 0.988 0.046 0.038

Quite similar change in agreeableness in both groups (increase is slightly larger in older participants). No significant differences according to the LRTs.

Conscientiousness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_agesplit_config_current, fit_lcs_consc_agesplit_weak_current, fit_lcs_consc_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_consc_agesplit_config_current 24 6823.5 6960.6 39.079           
fit_lcs_consc_agesplit_weak_current   26 6821.3 6949.2 40.849     1.7266
fit_lcs_consc_agesplit_strong_current 30 6838.5 6948.1 66.043    24.2290
                                      Df diff Pr(>Chisq)    
fit_lcs_consc_agesplit_config_current                       
fit_lcs_consc_agesplit_weak_current         2     0.4218    
fit_lcs_consc_agesplit_strong_current       4  7.186e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_consc_current <- broom::tidy(fit_lcs_consc_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 "))
kable(params_agesplit_lcs_consc_current, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.135 0.379 5.089 0
d_consc_1 ~1 d_int_b 0.142 0.397 6.187 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.136 0.382 7.602 0
d_consc_1 ~1 d_int 0.136 0.379 7.602 0
# model fit
kable(broom::glance(fit_lcs_consc_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 6821.272 6949.218 0.996 0.04 0.023

Very similar change in conscientiousness in both groups. No significant differences according to the LRTs.

Neuroticism (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_agesplit_config_current, fit_lcs_neuro_agesplit_weak_current, fit_lcs_neuro_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_neuro_agesplit_config_current 24 7720.1 7857.2 22.834           
fit_lcs_neuro_agesplit_weak_current   26 7716.6 7844.6 23.347    0.52313
fit_lcs_neuro_agesplit_strong_current 30 7711.0 7820.6 25.669    2.31850
                                      Df diff Pr(>Chisq)
fit_lcs_neuro_agesplit_config_current                   
fit_lcs_neuro_agesplit_weak_current         2     0.7698
fit_lcs_neuro_agesplit_strong_current       4     0.6774
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_neuro_current <- broom::tidy(fit_lcs_neuro_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 "))
kable(params_agesplit_lcs_neuro_current, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.184 -0.419 -5.605 0
d_neuro_1 ~1 d_int_b -0.204 -0.421 -7.195 0
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.196 -0.447 -9.107 0
d_neuro_1 ~1 d_int -0.196 -0.404 -9.107 0
# model fit
kable(broom::glance(fit_lcs_neuro_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 7716.641 7844.587 1 0 0.02

Very similar change in neuroticism in both groups. No significant differences according to the LRTs.

Openness (current personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_agesplit_config_current, fit_lcs_openn_agesplit_weak_current, fit_lcs_openn_agesplit_strong_current)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                      Df    AIC    BIC  Chisq Chisq diff
fit_lcs_openn_agesplit_config_current 24 6917.8 7054.9 30.878           
fit_lcs_openn_agesplit_weak_current   26 6922.5 7050.5 39.613      7.006
fit_lcs_openn_agesplit_strong_current 30 6926.0 7035.7 51.107     11.249
                                      Df diff Pr(>Chisq)  
fit_lcs_openn_agesplit_config_current                     
fit_lcs_openn_agesplit_weak_current         2    0.03011 *
fit_lcs_openn_agesplit_strong_current       4    0.02390 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_openn_current <- broom::tidy(fit_lcs_openn_agesplit_weak_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 "))
kable(params_agesplit_lcs_openn_current, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a 0.07 0.270 2.849 0.004
d_openn_1 ~1 d_int_b 0.06 0.256 3.401 0.001
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_agesplit_strong_current, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int 0.064 0.245 4.413 0
d_openn_1 ~1 d_int 0.064 0.273 4.413 0
# model fit
kable(broom::glance(fit_lcs_openn_agesplit_weak_current) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 6922.512 7050.457 0.994 0.038 0.031

Very similar change in openness in both groups. However, still significant differences according to the LRTs (at p < .05). Probably because of other parameters than the latent change score.

7.6.3.3 Ideal personality personality traits

Extraversion (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_extra_agesplit_config_ideal, fit_lcs_extra_agesplit_weak_ideal, fit_lcs_extra_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_extra_agesplit_config_ideal 24 6522.1 6659.2 28.439                   
fit_lcs_extra_agesplit_weak_ideal   26 6519.0 6647.0 29.317     0.8189       2
fit_lcs_extra_agesplit_strong_ideal 30 6537.0 6646.6 55.268    26.0530       4
                                    Pr(>Chisq)    
fit_lcs_extra_agesplit_config_ideal               
fit_lcs_extra_agesplit_weak_ideal        0.664    
fit_lcs_extra_agesplit_strong_ideal  3.088e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_extra_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_extra_ideal <- broom::tidy(fit_lcs_extra_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 "))
kable(params_agesplit_lcs_extra_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int_a -0.027 -0.076 -0.895 0.371
d_extra_1 ~1 d_int_b -0.039 -0.118 -1.575 0.115
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_extra_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_extra_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_extra_1 ~1 d_int -0.031 -0.086 -1.579 0.114
d_extra_1 ~1 d_int -0.031 -0.093 -1.579 0.114
# model fit
kable(broom::glance(fit_lcs_extra_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 6519.017 6646.962 0.997 0.019 0.031

Very similar change in ideal personality extraversion in both groups. No significant differences according to the LRTs.

Agreeableness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_agree_agesplit_config_ideal, fit_lcs_agree_agesplit_weak_ideal, fit_lcs_agree_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_agree_agesplit_config_ideal 24 6445.2 6582.3 15.575                   
fit_lcs_agree_agesplit_weak_ideal   26 6445.1 6573.0 19.487     3.4857       2
fit_lcs_agree_agesplit_strong_ideal 30 6446.7 6556.4 29.087     9.4855       4
                                    Pr(>Chisq)  
fit_lcs_agree_agesplit_config_ideal             
fit_lcs_agree_agesplit_weak_ideal      0.17502  
fit_lcs_agree_agesplit_strong_ideal    0.05005 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# show model with varying latent change parameters 
# -> key parameter is "d_agree_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_agree_ideal <- broom::tidy(fit_lcs_agree_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 "))
kable(params_agesplit_lcs_agree_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int_a 0.013 0.042 0.515 0.606
d_agree_1 ~1 d_int_b 0.011 0.037 0.566 0.571
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_agree_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_agree_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_agree_1 ~1 d_int 0.011 0.037 0.754 0.451
d_agree_1 ~1 d_int 0.011 0.039 0.754 0.451
# model fit
kable(broom::glance(fit_lcs_agree_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 6445.092 6573.038 1 0 0.03

Very similar change in ideal personality agreeableness in both groups. No significant differences according to the LRTs.

Conscientiousness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_consc_agesplit_config_ideal, fit_lcs_consc_agesplit_weak_ideal, fit_lcs_consc_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_consc_agesplit_config_ideal 24 5536.0 5673.1 30.845                   
fit_lcs_consc_agesplit_weak_ideal   26 5533.1 5661.0 31.899     0.7185       2
fit_lcs_consc_agesplit_strong_ideal 30 5528.8 5638.4 35.572     3.7214       4
                                    Pr(>Chisq)
fit_lcs_consc_agesplit_config_ideal           
fit_lcs_consc_agesplit_weak_ideal       0.6982
fit_lcs_consc_agesplit_strong_ideal     0.4450
# show model with varying latent change parameters 
# -> key parameter is "d_consc_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_consc_ideal <- broom::tidy(fit_lcs_consc_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 "))
kable(params_agesplit_lcs_consc_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int_a 0.019 0.050 0.668 0.504
d_consc_1 ~1 d_int_b 0.026 0.083 1.225 0.221
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_consc_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_consc_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_consc_1 ~1 d_int 0.023 0.060 1.35 0.177
d_consc_1 ~1 d_int 0.023 0.074 1.35 0.177
# model fit
kable(broom::glance(fit_lcs_consc_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 5533.1 5661.045 0.996 0.025 0.036

Very similar change in ideal personality conscientiousness in both groups. No significant differences according to the LRTs.

Neuroticism (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_neuro_agesplit_config_ideal, fit_lcs_neuro_agesplit_weak_ideal, fit_lcs_neuro_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_neuro_agesplit_config_ideal 24 5781.2 5918.3 25.244                   
fit_lcs_neuro_agesplit_weak_ideal   26 5777.4 5905.4 25.453    0.19131       2
fit_lcs_neuro_agesplit_strong_ideal 30 5772.5 5882.2 28.517    3.09068       4
                                    Pr(>Chisq)
fit_lcs_neuro_agesplit_config_ideal           
fit_lcs_neuro_agesplit_weak_ideal       0.9088
fit_lcs_neuro_agesplit_strong_ideal     0.5428
# show model with varying latent change parameters 
# -> key parameter is "d_neuro_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_neuro_ideal <- broom::tidy(fit_lcs_neuro_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 "))
kable(params_agesplit_lcs_neuro_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int_a -0.014 -0.040 -0.495 0.620
d_neuro_1 ~1 d_int_b -0.016 -0.052 -0.783 0.434
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_neuro_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_neuro_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_neuro_1 ~1 d_int -0.016 -0.047 -0.968 0.333
d_neuro_1 ~1 d_int -0.016 -0.051 -0.968 0.333
# model fit
kable(broom::glance(fit_lcs_neuro_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 5777.437 5905.382 1 0 0.03

Very similar change in ideal personality neuroticism in both groups. No significant differences according to the LRTs.

Openness (ideal personality): results

# model comparison tests for measurement invariance
lavTestLRT(fit_lcs_openn_agesplit_config_ideal, fit_lcs_openn_agesplit_weak_ideal, fit_lcs_openn_agesplit_strong_ideal)

Scaled Chi-Squared Difference Test (method = "satorra.bentler.2001")

lavaan NOTE:
    The "Chisq" column contains standard test statistics, not the
    robust test that should be reported per model. A robust difference
    test is a function of two standard (not robust) statistics.
 
                                    Df    AIC    BIC  Chisq Chisq diff Df diff
fit_lcs_openn_agesplit_config_ideal 24 6649.1 6786.2 36.028                   
fit_lcs_openn_agesplit_weak_ideal   26 6647.6 6775.6 38.553     2.4820       2
fit_lcs_openn_agesplit_strong_ideal 30 6646.1 6755.8 45.058     6.6167       4
                                    Pr(>Chisq)
fit_lcs_openn_agesplit_config_ideal           
fit_lcs_openn_agesplit_weak_ideal       0.2891
fit_lcs_openn_agesplit_strong_ideal     0.1576
# show model with varying latent change parameters 
# -> key parameter is "d_openn_1 ~1"
# labelled parameter as "d_int_a" & "d_int_b" (a = old, b = young)
params_agesplit_lcs_openn_ideal <- broom::tidy(fit_lcs_openn_agesplit_weak_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 "))
kable(params_agesplit_lcs_openn_ideal, digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int_a -0.005 -0.018 -0.214 0.831
d_openn_1 ~1 d_int_b -0.001 -0.005 -0.063 0.950
# constrained to be equal in the strong measurement invariance model:
kable(broom::tidy(fit_lcs_openn_agesplit_strong_ideal, conf.int = TRUE, conf.level = 0.95) %>% 
        select(term, label, estimate, std.all, statistic, p.value) %>% 
        filter(term %in% c("d_openn_1 ~1 ")), digits = 3) 
term label estimate std.all statistic p.value
d_openn_1 ~1 d_int -0.002 -0.008 -0.163 0.871
d_openn_1 ~1 d_int -0.002 -0.011 -0.163 0.871
# model fit
kable(broom::glance(fit_lcs_openn_agesplit_weak_ideal) %>% 
        select(nobs, npar, AIC, BIC, cfi, rmsea, srmr), digits = 3)
nobs npar AIC BIC cfi rmsea srmr
713 28 6647.613 6775.558 0.991 0.037 0.036

Very similar change in ideal personality openness in both age groups. No significant differences according to the LRTs.

7.6.3.4 Summary of latent main effects split by age group
Show the code
params_agesplit_summary <- bind_rows(
  params_agesplit_lcs_extra_current %>% mutate(trait = names(b5_vars)[1], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_extra_ideal %>% mutate(trait = names(b5_vars)[1], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_agree_current %>% mutate(trait = names(b5_vars)[2], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_agree_ideal %>% mutate(trait = names(b5_vars)[2], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_consc_current %>% mutate(trait = names(b5_vars)[3], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_consc_ideal %>% mutate(trait = names(b5_vars)[3], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_neuro_current %>% mutate(trait = names(b5_vars)[4], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_neuro_ideal %>% mutate(trait = names(b5_vars)[4], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_openn_current %>% mutate(trait = names(b5_vars)[5], self = "current") %>% select(trait, self, group = label, beta = std.all, p.value),
  params_agesplit_lcs_openn_ideal %>% mutate(trait = names(b5_vars)[5], self = "ideal") %>% select(trait, self, group = label, beta = std.all, p.value)
) %>% mutate(group = ifelse(group=="d_int_a", "old", "young"))

kable(params_agesplit_summary, digits = 3)
trait self group beta p.value
extraversion current old 0.391 0.000
extraversion current young 0.427 0.000
extraversion ideal old -0.076 0.371
extraversion ideal young -0.118 0.115
agreeableness current old 0.428 0.000
agreeableness current young 0.197 0.008
agreeableness ideal old 0.042 0.606
agreeableness ideal young 0.037 0.571
conscientiousness current old 0.379 0.000
conscientiousness current young 0.397 0.000
conscientiousness ideal old 0.050 0.504
conscientiousness ideal young 0.083 0.221
neuroticism current old -0.419 0.000
neuroticism current young -0.421 0.000
neuroticism ideal old -0.040 0.620
neuroticism ideal young -0.052 0.434
openness current old 0.270 0.004
openness current young 0.256 0.001
openness ideal old -0.018 0.831
openness ideal young -0.005 0.950

Overall, no significant differences between the two age groups in how they change in personality (current / ideal).